From a84fabf61baeca507bdc34ec15ed05534b2ef56d Mon Sep 17 00:00:00 2001 From: Dasha Date: Fri, 6 Mar 2026 14:47:05 +0300 Subject: [PATCH 1/2] commander: 1st try --- .../hse/java/commander/MainController.java | 172 +++++++++++++++--- 1 file changed, 143 insertions(+), 29 deletions(-) diff --git a/commander/src/main/java/hse/java/commander/MainController.java b/commander/src/main/java/hse/java/commander/MainController.java index 5de3b66d..d9bb0f59 100644 --- a/commander/src/main/java/hse/java/commander/MainController.java +++ b/commander/src/main/java/hse/java/commander/MainController.java @@ -1,45 +1,159 @@ package hse.java.commander; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ListView; -import java.nio.file.Path; - public class MainController { - @FXML - public ListView left; + @FXML public ListView left; + + @FXML public ListView right; + + @FXML public Button copy; + + @FXML public Button move; + + @FXML public Button delete; + + private Path leftDir; + private Path rightDir; + private ListView activePanel; + + public void setInitialDirs(Path leftStart, Path rightStart) { + this.leftDir = leftStart; + this.rightDir = rightStart; + updatePanel(left, leftDir); + updatePanel(right, rightDir); + } + + public void initialize() { + left.setOnMouseClicked(event -> { + activePanel = left; + if (event.getClickCount() == 2) { + navigatePanel(left, leftDir, true); + } + }); + + right.setOnMouseClicked(event -> { + activePanel = right; + if (event.getClickCount() == 2) { + navigatePanel(right, rightDir, false); + } + }); + + copy.setOnAction(event -> copyFile()); + move.setOnAction(event -> moveFile()); + delete.setOnAction(event -> deleteFile()); + } - @FXML - public ListView right; + private void updatePanel(ListView panel, Path dir) { + panel.getItems().clear(); + panel.getItems().add("..."); + File[] files = dir.toFile().listFiles(); + if (files != null) { + for (File file : files) { + panel.getItems().add(file.getName()); + } + } + } + + private void navigatePanel(ListView panel, Path currentDir, + boolean isLeft) { + String selected = panel.getSelectionModel().getSelectedItem(); + if (selected == null) + return; + + if (selected.equals("...")) { + Path parent = currentDir.getParent(); + if (parent != null) { + if (isLeft) { + leftDir = parent; + updatePanel(left, leftDir); + } else { + rightDir = parent; + updatePanel(right, rightDir); + } + } + } else { + Path newPath = currentDir.resolve(selected); + if (Files.isDirectory(newPath)) { + if (isLeft) { + leftDir = newPath; + updatePanel(left, leftDir); + } else { + rightDir = newPath; + updatePanel(right, rightDir); + } + } + } + } + + private void copyFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path sourceDir = (activePanel == left) ? leftDir : rightDir; + Path targetDir = (activePanel == left) ? rightDir : leftDir; + ListView targetPanel = (activePanel == left) ? right : left; - @FXML - public Button move; + Path source = sourceDir.resolve(selected); + Path target = targetDir.resolve(selected); - private Path leftDir; - private Path rightDir; + try { + Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); + updatePanel(targetPanel, targetDir); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void moveFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path sourceDir = (activePanel == left) ? leftDir : rightDir; + Path targetDir = (activePanel == left) ? rightDir : leftDir; + ListView targetPanel = (activePanel == left) ? right : left; - // for testing - public void setInitialDirs(Path leftStart, Path rightStart) { - this.leftDir = leftStart; - this.rightDir = rightStart; + Path source = sourceDir.resolve(selected); + Path target = targetDir.resolve(selected); + + try { + Files.move(source, target, StandardCopyOption.REPLACE_EXISTING); + updatePanel(activePanel, sourceDir); + updatePanel(targetPanel, targetDir); + } catch (IOException e) { + e.printStackTrace(); } + } + + private void deleteFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path currentDir = (activePanel == left) ? leftDir : rightDir; + Path toDelete = currentDir.resolve(selected); - public void initialize() { - move.setOnMouseClicked(event -> { - - }); - System.out.println(System.getProperty("user.home")); - left.getItems().add("Kek"); - - left.setOnMouseClicked(event -> { - if (event.getClickCount() == 2) { - int index = left.getSelectionModel().getSelectedIndex(); - if (index >= 0) { - left.getItems().set(index, "clicked"); - } - } - }); + try { + Files.deleteIfExists(toDelete); + updatePanel(activePanel, currentDir); + } catch (IOException e) { + e.printStackTrace(); } + } } From 693a983a862fb0bcc4cba41109206505e348cc21 Mon Sep 17 00:00:00 2001 From: Dasha Date: Fri, 6 Mar 2026 16:15:50 +0300 Subject: [PATCH 2/2] commander: rerun tests --- commander/src/main/java/hse/java/commander/MainController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/commander/src/main/java/hse/java/commander/MainController.java b/commander/src/main/java/hse/java/commander/MainController.java index d9bb0f59..12304ddb 100644 --- a/commander/src/main/java/hse/java/commander/MainController.java +++ b/commander/src/main/java/hse/java/commander/MainController.java @@ -10,7 +10,6 @@ import javafx.scene.control.ListView; public class MainController { - @FXML public ListView left; @FXML public ListView right;