WIP code for ClipboardHistory
parent
c08511124c
commit
56c4d53290
@ -0,0 +1,116 @@
|
|||||||
|
package me.goudham;
|
||||||
|
|
||||||
|
import dorkbox.systemTray.Checkbox;
|
||||||
|
import dorkbox.systemTray.Separator;
|
||||||
|
import dorkbox.systemTray.SystemTray;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Objects;
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
import javafx.beans.binding.Bindings;
|
||||||
|
import javafx.embed.swing.SwingFXUtils;
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.ContextMenu;
|
||||||
|
import javafx.scene.control.ListCell;
|
||||||
|
import javafx.scene.control.MenuItem;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import me.goudham.event.ImageEvent;
|
||||||
|
import me.goudham.event.TextEvent;
|
||||||
|
import me.goudham.exception.UnsupportedSystemException;
|
||||||
|
|
||||||
|
public class ClipboardHistoryApplication extends Application {
|
||||||
|
|
||||||
|
private MyClipboard myClipboard;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage stage) throws IOException {
|
||||||
|
SystemTray.DEBUG = true;
|
||||||
|
Platform.setImplicitExit(false);
|
||||||
|
|
||||||
|
SystemTray systemTray = SystemTray.get();
|
||||||
|
if (systemTray == null) {
|
||||||
|
throw new RuntimeException("Unable to load SystemTray!");
|
||||||
|
}
|
||||||
|
|
||||||
|
systemTray.setImage(Objects.requireNonNull(getClass().getClassLoader().getResource("clipboard-white.png")));
|
||||||
|
|
||||||
|
systemTray.getMenu().add(new dorkbox.systemTray.MenuItem("Open MyClipboardHistory", e -> {
|
||||||
|
Platform.runLater(stage::show);
|
||||||
|
}));
|
||||||
|
systemTray.getMenu().add(new Separator());
|
||||||
|
|
||||||
|
systemTray.getMenu().add(new Checkbox("Monitor Text", e -> System.err.println("Am i checked? " + ((Checkbox) e.getSource()).getChecked())));
|
||||||
|
|
||||||
|
systemTray.getMenu().add(new Separator());
|
||||||
|
systemTray.getMenu().add(new dorkbox.systemTray.MenuItem("Quit", e -> {
|
||||||
|
systemTray.shutdown();
|
||||||
|
System.exit(0);
|
||||||
|
})).setShortcut('Q');
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
myClipboard = MyClipboard.getSystemClipboard();
|
||||||
|
myClipboard.startListening();
|
||||||
|
} catch (UnsupportedSystemException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().getResource("clipboard-history.fxml"));
|
||||||
|
Scene scene = new Scene(fxmlLoader.load());
|
||||||
|
stage.getIcons().add(new Image(String.valueOf(getClass().getClassLoader().getResource("clipboard-black.png"))));
|
||||||
|
stage.setTitle("MyClipboardHistory");
|
||||||
|
stage.setHeight(529);
|
||||||
|
stage.setWidth(765);
|
||||||
|
stage.setResizable(false);
|
||||||
|
|
||||||
|
stage.setScene(scene);
|
||||||
|
ClipboardHistoryController clipboardHistoryController = fxmlLoader.getController();
|
||||||
|
clipboardHistoryController.setMyClipboard(myClipboard);
|
||||||
|
|
||||||
|
myClipboard.addEventListener((TextEvent) (oldContent, newContent) -> {
|
||||||
|
Platform.runLater(() -> clipboardHistoryController.textList.getItems().add(0, newContent));
|
||||||
|
});
|
||||||
|
|
||||||
|
myClipboard.addEventListener((ImageEvent) (oldContent, newContent) -> {
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
clipboardHistoryController.clipboardImage.setImage(SwingFXUtils.toFXImage(newContent, null));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
clipboardHistoryController.textList.setCellFactory(lv -> {
|
||||||
|
ListCell<String> cell = new ListCell<>();
|
||||||
|
ContextMenu contextMenu = new ContextMenu();
|
||||||
|
|
||||||
|
MenuItem editItem = new MenuItem();
|
||||||
|
editItem.textProperty().bind(Bindings.format("Copy", cell.itemProperty()));
|
||||||
|
editItem.setOnAction(event -> {
|
||||||
|
String contentToCopy = cell.getItem();
|
||||||
|
clipboardHistoryController.textList.getItems().remove(contentToCopy);
|
||||||
|
myClipboard.insertAndNotify(contentToCopy);
|
||||||
|
});
|
||||||
|
MenuItem deleteItem = new MenuItem();
|
||||||
|
deleteItem.textProperty().bind(Bindings.format("Remove", cell.itemProperty()));
|
||||||
|
deleteItem.setOnAction(event -> clipboardHistoryController.textList.getItems().remove(cell.getItem()));
|
||||||
|
contextMenu.getItems().addAll(editItem, deleteItem);
|
||||||
|
|
||||||
|
cell.textProperty().bind(cell.itemProperty());
|
||||||
|
cell.emptyProperty().addListener((obs, wasEmpty, isNowEmpty) -> {
|
||||||
|
if (isNowEmpty) {
|
||||||
|
cell.setContextMenu(null);
|
||||||
|
} else {
|
||||||
|
cell.setContextMenu(contextMenu);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return cell ;
|
||||||
|
});
|
||||||
|
|
||||||
|
stage.setOnCloseRequest(event -> stage.hide());
|
||||||
|
stage.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
launch();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package me.goudham;
|
||||||
|
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.scene.control.TabPane;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
|
||||||
|
public class ClipboardHistoryController {
|
||||||
|
public TabPane tabPane;
|
||||||
|
public ListView<String> textList;
|
||||||
|
public ListView<String> fileList;
|
||||||
|
public ImageView clipboardImage;
|
||||||
|
|
||||||
|
private MyClipboard myClipboard;
|
||||||
|
|
||||||
|
public MyClipboard getMyClipboard() {
|
||||||
|
return myClipboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMyClipboard(MyClipboard myClipboard) {
|
||||||
|
this.myClipboard = myClipboard;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Rectangle2D?>
|
||||||
|
<?import javafx.scene.control.ListView?>
|
||||||
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
|
<?import javafx.scene.control.Tab?>
|
||||||
|
<?import javafx.scene.control.TabPane?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
|
||||||
|
<TabPane fx:id="tabPane" prefHeight="529.0" prefWidth="765.0" side="LEFT" style="-fx-background-color: #00000d;" stylesheets="@css/tabPane.css" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="me.goudham.ClipboardHistoryController">
|
||||||
|
<tabs>
|
||||||
|
<Tab style="-fx-background-color: #00000d;">
|
||||||
|
<content>
|
||||||
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="505.0" prefWidth="301.0">
|
||||||
|
<children>
|
||||||
|
<ListView fx:id="textList" layoutY="54.0" prefHeight="600.0" prefWidth="645.0" stylesheets="@css/list.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</content>
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="62.0" fitWidth="62.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@icons8-text.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</Tab>
|
||||||
|
<Tab style="-fx-background-color: #00000d;">
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="62.0" fitWidth="62.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@icons8-image.png" />
|
||||||
|
</image>
|
||||||
|
<viewport>
|
||||||
|
<Rectangle2D />
|
||||||
|
</viewport>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
<content>
|
||||||
|
<AnchorPane prefHeight="653.0" prefWidth="668.0">
|
||||||
|
<children>
|
||||||
|
<ScrollPane prefHeight="653.0" prefWidth="668.0" style="-fx-background-color: transparent; -fx-background: #00000d;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<content>
|
||||||
|
<ImageView fx:id="clipboardImage" fitHeight="653.0" fitWidth="668.0" pickOnBounds="true" preserveRatio="true" />
|
||||||
|
</content>
|
||||||
|
</ScrollPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</content>
|
||||||
|
</Tab>
|
||||||
|
<Tab fx:id="file" style="-fx-background-color: #00000d;">
|
||||||
|
<content>
|
||||||
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="277.0">
|
||||||
|
<children>
|
||||||
|
<ListView fx:id="fileList" prefHeight="530.0" prefWidth="661.0" stylesheets="@css/list.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children></AnchorPane>
|
||||||
|
</content>
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="62.0" fitWidth="62.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@icons8-file.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</Tab>
|
||||||
|
</tabs>
|
||||||
|
</TabPane>
|
Loading…
Reference in New Issue