diff --git a/commander/src/main/java/hse/java/commander/MainController.java b/commander/src/main/java/hse/java/commander/MainController.java index 5de3b66d..4c5d5804 100644 --- a/commander/src/main/java/hse/java/commander/MainController.java +++ b/commander/src/main/java/hse/java/commander/MainController.java @@ -4,18 +4,110 @@ import javafx.scene.control.Button; import javafx.scene.control.ListView; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; public class MainController { @FXML public ListView left; - @FXML public ListView right; - @FXML public Button move; + @FXML + public Button delete; + @FXML + public Button copy; + + private ListView activePanel; + + private Path panelTasks(Path nameDir, ListView panel) { + int index = panel.getSelectionModel().getSelectedIndex(); + if (index > 0) { + File f = new File(nameDir.toFile().getAbsolutePath(), panel.getItems().get(index)); + if (f.isDirectory()) { + nameDir = nameDir.resolve(panel.getItems().get(index)); + moveAction(nameDir, panel); + } + } + if (index == 0) { + nameDir = backAction(nameDir, panel); + } + return nameDir; + } + + private void moveAction(Path nameDir, ListView panel) { + panel.getItems().clear(); + panel.getItems().add("..."); + for (File file : nameDir.toFile().listFiles()) { + panel.getItems().add(file.getName()); + } + } + + private Path backAction(Path nameDir, ListView panel) { + System.out.println(nameDir.getParent()); + nameDir = nameDir.getParent(); + if (nameDir.equals(nameDir.getRoot())) { + throw new RuntimeException("Выше директории нет"); + } + moveAction(nameDir, panel); + return nameDir; + } + + void copy(Path nameDir, ListView panel, Path toNameDir, ListView toPanel) { + int index = panel.getSelectionModel().getSelectedIndex(); + if (index > 0) { + File f = new File(nameDir.toFile().getAbsolutePath(), panel.getItems().get(index)); + if (f.isFile()) { + if (f.isFile()) { + try { + Files.copy(nameDir.resolve(f.getName()), toNameDir.resolve(f.getName())); + moveAction(toNameDir, toPanel); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + } + + void move(Path nameDir, ListView panel, Path toNameDir, ListView toPanel) { + int index = panel.getSelectionModel().getSelectedIndex(); + if (index > 0) { + File f = new File(nameDir.toFile().getAbsolutePath(), panel.getItems().get(index)); + if (f.isFile()) { + if (f.isFile()) { + try { + Files.move(nameDir.resolve(f.getName()), toNameDir.resolve(f.getName())); + moveAction(toNameDir, toPanel); + moveAction(nameDir, panel); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + } + + void delete(Path nameDir, ListView panel) { + int index = panel.getSelectionModel().getSelectedIndex(); + if (index > 0) { + File f = new File(nameDir.toFile().getAbsolutePath(), panel.getItems().get(index)); + if (f.isFile()) { + if (f.isFile()) { + try { + Files.delete(nameDir.resolve(f.getName())); + moveAction(nameDir, panel); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + } private Path leftDir; private Path rightDir; @@ -24,22 +116,64 @@ public class MainController { public void setInitialDirs(Path leftStart, Path rightStart) { this.leftDir = leftStart; this.rightDir = rightStart; + + moveAction(leftDir, left); + moveAction(rightStart, right); } public void initialize() { - move.setOnMouseClicked(event -> { + leftDir = Path.of(System.getProperty("user.home")); + rightDir = Path.of(System.getProperty("user.home")); + moveAction(leftDir, left); + moveAction(rightDir, right); + left.setOnMouseClicked(event -> { + activePanel = left; + if (event.getClickCount() == 2) { + leftDir = panelTasks(leftDir, left); + } }); - System.out.println(System.getProperty("user.home")); - left.getItems().add("Kek"); - left.setOnMouseClicked(event -> { + right.setOnMouseClicked(event -> { + activePanel = right; if (event.getClickCount() == 2) { - int index = left.getSelectionModel().getSelectedIndex(); - if (index >= 0) { - left.getItems().set(index, "clicked"); + rightDir = panelTasks(rightDir, right); + } + }); + + copy.setOnMouseClicked(event -> { + if (event.getClickCount() == 1) { + if (activePanel == left) { + copy(leftDir, left, rightDir, right); + } + if (activePanel == right) { + copy(rightDir, right, leftDir, left); } } }); + + move.setOnMouseClicked(event -> { + if (event.getClickCount() == 1) { + if (activePanel == left) { + move(leftDir, left, rightDir, right); + } + if (activePanel == right) { + move(rightDir, right, leftDir, left); + } + } + }); + + delete.setOnMouseClicked(event -> { + if (event.getClickCount() == 1) { + if (activePanel == left) { + delete(leftDir, left); + } + if (activePanel == right) { + delete(rightDir, right); + } + } + }); + + } }