From a9490e583278917d81d38435ceec9424330bc783 Mon Sep 17 00:00:00 2001 From: Oscar <4991127@outlook.com> Date: Tue, 6 Aug 2019 02:03:52 -0500 Subject: [PATCH] Initial Commit --- .idea/compiler.xml | 26 ++++ .idea/misc.xml | 14 ++ .idea/vcs.xml | 6 + pom.xml | 74 ++++++++++ src/main/java/sample/Controller.java | 188 +++++++++++++++++++++++++ src/main/java/sample/ImageHandler.java | 24 ++++ src/main/java/sample/Main.java | 31 ++++ src/main/resources/fxml/noImage.jpg | Bin 0 -> 23715 bytes src/main/resources/fxml/sample.css | 11 ++ src/main/resources/fxml/sample.fxml | 147 +++++++++++++++++++ src/main/resources/log4j2.xml | 14 ++ 11 files changed, 535 insertions(+) create mode 100644 .idea/compiler.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 src/main/java/sample/Controller.java create mode 100644 src/main/java/sample/ImageHandler.java create mode 100644 src/main/java/sample/Main.java create mode 100644 src/main/resources/fxml/noImage.jpg create mode 100644 src/main/resources/fxml/sample.css create mode 100644 src/main/resources/fxml/sample.fxml create mode 100644 src/main/resources/log4j2.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..afc5305 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b661a5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3905b0e --- /dev/null +++ b/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + com.mauville.sorth + sortH + 1.9-SNAPSHOT + + sortH + jar + + + 1.8 + + + + + GNU GPLV3 + + + + + commons-io + commons-io + 2.6 + + + org.apache.logging.log4j + log4j-api + 2.6.1 + + + org.apache.logging.log4j + log4j-core + 2.6.1 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${jdk.version} + ${jdk.version} + UTF-8 + + + + com.jolira + onejar-maven-plugin + 1.4.4 + + + + sample.Main + 0.97 + true + + + one-jar + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/sample/Controller.java b/src/main/java/sample/Controller.java new file mode 100644 index 0000000..91ddc0f --- /dev/null +++ b/src/main/java/sample/Controller.java @@ -0,0 +1,188 @@ +package sample; + +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Text; +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +public class Controller { + + private static final Logger LOGGER = LogManager.getLogger(Controller.class); + + @FXML + Button button = new Button(); + @FXML + Label P = new Label(); + @FXML + Label threedee = new Label(); + @FXML + Label T = new Label(); + @FXML + Label NP = new Label(); + @FXML + Label FD = new Label(); + @FXML + Label EC = new Label(); + @FXML + Label A = new Label(); + @FXML + Label O = new Label(); + private final Label SKIP = new Label(); + @FXML + ImageView imageholder = new ImageView(); + @FXML + Text logField = new Text(); + @FXML + GridPane nonum = new GridPane(); + @FXML + GridPane num = new GridPane(); + + //Keyboard shortcuts + private final KeyCombination PCode = new KeyCodeCombination(KeyCode.DIGIT8); + private final KeyCombination threedeeCode = new KeyCodeCombination(KeyCode.DIGIT4); + private final KeyCombination TCode = new KeyCodeCombination(KeyCode.DIGIT2); + private final KeyCombination NPCode = new KeyCodeCombination(KeyCode.DIGIT6); + private final KeyCombination FDCode = new KeyCodeCombination(KeyCode.DIGIT8, KeyCombination.CONTROL_DOWN); + private final KeyCombination ECCode = new KeyCodeCombination(KeyCode.DIGIT4, KeyCombination.CONTROL_DOWN); + private final KeyCombination ACode = new KeyCodeCombination(KeyCode.DIGIT2, KeyCombination.CONTROL_DOWN); + private final KeyCombination OCode = new KeyCodeCombination(KeyCode.DIGIT6, KeyCombination.CONTROL_DOWN); + private final KeyCombination SkipCode = new KeyCodeCombination(KeyCode.DIGIT0, KeyCombination.CONTROL_DOWN); + private final KeyCombination SkipCode2 = new KeyCodeCombination(KeyCode.DIGIT0); + + private List imageFiles; + private File cwd; + private int currentImage = 0; + private File currentFile; + private final Runnable rnP = () -> processImage(P); + private final Runnable rnthreedee = () -> processImage(threedee); + private final Runnable rnT = () -> processImage(T); + private final Runnable rnNP = () -> processImage(NP); + private final Runnable rnFD = () -> processImage(FD); + private final Runnable rnEC = () -> processImage(EC); + private final Runnable rnA = () -> processImage(A); + private final Runnable rnO = () -> processImage(O); + private final Runnable rnSKIP = () -> processImage(SKIP); + + public void setAccel() { + Scene scn = FD.getScene(); + scn.getAccelerators().put(PCode, rnP); + scn.getAccelerators().put(threedeeCode, rnthreedee); + scn.getAccelerators().put(TCode, rnT); + scn.getAccelerators().put(NPCode, rnNP); + scn.getAccelerators().put(FDCode, rnFD); + scn.getAccelerators().put(ECCode, rnEC); + scn.getAccelerators().put(ACode, rnA); + scn.getAccelerators().put(OCode, rnO); + scn.getAccelerators().put(SkipCode, rnSKIP); + scn.getAccelerators().put(SkipCode2, rnSKIP); + LOGGER.info("Set accelerators"); + + button.setVisible(false); + + + } + + @FXML + public void initialize() { + boot(); + SKIP.setText("SKIP"); + } + + + private void processImage(Label dir) { + LOGGER.info(dir.getText()); + if (!(dir.getText().equals("SKIP"))) { + File directory2Move2 = null; + try { + directory2Move2 = new File(cwd.getCanonicalPath() + "\\" + dir.getText()); + LOGGER.info("Moving to : " + directory2Move2); + } catch (IOException e) { + LOGGER.error("Failed to convert to Canonical Path"); + } + try { + FileUtils.moveFileToDirectory(currentFile, directory2Move2, true); + LOGGER.info(currentFile + " " + directory2Move2); + } catch (IOException e) { + LOGGER.error("Failed to move file"); + e.printStackTrace(); + } + } + logField.setText(dir.getText()); + currentImage++; + try { + displayNext(); + } catch (FileNotFoundException e) { + LOGGER.error("No further images found"); + } + } + + private void displayNext() throws FileNotFoundException { + try { + currentFile = imageFiles.get(currentImage); + FileInputStream inputstream; + inputstream = new FileInputStream(currentFile); + Image image = new Image(inputstream); + imageholder.setFitHeight(500); + imageholder.setPreserveRatio(true); + imageholder.setSmooth(true); + imageholder.setImage(image); + inputstream.close(); + } catch (IndexOutOfBoundsException e) { + LOGGER.warn("End of Images"); + System.exit(0); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + private void boot() { + cwd = openFileChooser(); + try { + imageFiles = ImageHandler.getImages(cwd); + } catch (IOException e) { + LOGGER.error("No such directory"); + e.printStackTrace(); + } + try { + LOGGER.info("Loading Images"); + imageFiles = ImageHandler.getImages("C:\\Users\\X220\\Desktop\\images"); + cwd = new File("C:\\Users\\X220\\Desktop\\images"); + displayNext(); + LOGGER.info("Loaded Images"); + } catch (IOException e) { + LOGGER.error("No such directory"); + } + } + + private File openFileChooser() { + Stage filer = new Stage(); + DirectoryChooser chooser = new DirectoryChooser(); + chooser.setTitle("Choose Directory"); + String userWindows = System.getenv("USERPROFILE"); + File defaultDirectory = new File(userWindows); + chooser.setInitialDirectory(defaultDirectory); + File mark = chooser.showDialog(filer); + LOGGER.info("Current path" + mark); + return mark; + } + +} diff --git a/src/main/java/sample/ImageHandler.java b/src/main/java/sample/ImageHandler.java new file mode 100644 index 0000000..1fc794b --- /dev/null +++ b/src/main/java/sample/ImageHandler.java @@ -0,0 +1,24 @@ +package sample; + +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +class ImageHandler { + + public static List getImages(File dir) throws IOException { + String[] extensions = new String[] { "jpg", "png", "gif" }; + System.out.println("Getting all images " + dir.getCanonicalPath() + + " including those in subdirectories"); + return (List) FileUtils.listFiles(dir, extensions,false); + } + public static List getImages(String dir) throws IOException { + String[] extensions = new String[] { "jpg", "png", "gif" }; + System.out.println("Getting all images " + dir + + " including those in subdirectories"); + return (List) FileUtils.listFiles(new File (dir), extensions,false); + } + +} diff --git a/src/main/java/sample/Main.java b/src/main/java/sample/Main.java new file mode 100644 index 0000000..4832b67 --- /dev/null +++ b/src/main/java/sample/Main.java @@ -0,0 +1,31 @@ +package sample; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +import java.awt.*; + +public class Main extends Application { + + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage primaryStage) throws Exception { + Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("fxml/sample.fxml")); + primaryStage.setTitle("SortH"); + GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); + int width = gd.getDisplayMode().getWidth(); + int height = gd.getDisplayMode().getHeight(); + Scene scene = new Scene(root, width - width * .2, height - height * .1); + //Listen for scene changes + + + primaryStage.setScene(scene); + primaryStage.show(); + } +} diff --git a/src/main/resources/fxml/noImage.jpg b/src/main/resources/fxml/noImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba4e2cb6421eaae2ea43f653cd1922b6600e22f1 GIT binary patch literal 23715 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 TD!V`w$5PBPLf~|#aUcKLOy{X_ literal 0 HcmV?d00001 diff --git a/src/main/resources/fxml/sample.css b/src/main/resources/fxml/sample.css new file mode 100644 index 0000000..2507aff --- /dev/null +++ b/src/main/resources/fxml/sample.css @@ -0,0 +1,11 @@ +.root { + -fx-font-size: 14px; + -fx-font-family: sans-serif; + -fx-background-color: #bbbbbb; +} +.grid{ + -fx-font-size: 19px; +} +.imageview{ + -fx-margin: 0,auto; +} diff --git a/src/main/resources/fxml/sample.fxml b/src/main/resources/fxml/sample.fxml new file mode 100644 index 0000000..f813c8a --- /dev/null +++ b/src/main/resources/fxml/sample.fxml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +