diff --git a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java index 72b8df9..f1bd718 100644 --- a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java +++ b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java @@ -18,6 +18,7 @@ import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.*; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; @@ -96,6 +97,9 @@ public class Controller { @FXML private void initialize() { + // set up copy-cell-to-clipboard functionality + tunnelsTableView.setOnKeyPressed(new TableKeyEventHandler()); + DirectoryChooser directoryChooser = new DirectoryChooser(); typeCol.setCellValueFactory(new PropertyValueFactory("type")); @@ -391,5 +395,30 @@ public class Controller { return getRouterWrapper().getTunnelControl().getEepSiteTunnel(); } + public static class TableKeyEventHandler implements EventHandler { + KeyCodeCombination ctrlC = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY); + KeyCodeCombination cmdD = new KeyCodeCombination(KeyCode.C, KeyCombination.META_ANY); + public void handle(final KeyEvent keyEvent) { + if (ctrlC.match(keyEvent) || cmdD.match(keyEvent)) { + if (keyEvent.getSource() instanceof TableView) { + copySelectionToClipboard((TableView) keyEvent.getSource()); + keyEvent.consume(); + } + } + } + } + + public static void copySelectionToClipboard(TableView table) { + var cellPositions = table.getSelectionModel().getSelectedCells(); + if(cellPositions.size()>0) { + var cellPosition = cellPositions.get(0); + var cell = table.getColumns().get(cellPosition.getColumn()).getCellData(cellPosition.getRow()); + if(cell!=null) { + var clipboardContent = new ClipboardContent(); + clipboardContent.putString(cell.toString()); + Clipboard.getSystemClipboard().setContent(clipboardContent); + } + } + } }