diff --git a/src/main/java/ru/dmitriymx/corrector1s/gui/Main.java b/src/main/java/ru/dmitriymx/corrector1s/gui/Main.java index 9c04b0d..3cb4247 100644 --- a/src/main/java/ru/dmitriymx/corrector1s/gui/Main.java +++ b/src/main/java/ru/dmitriymx/corrector1s/gui/Main.java @@ -19,13 +19,15 @@ public class Main extends Application { primaryStage.setTitle("1С корректор (v1.0)"); primaryStage.setResizable(false); primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("excel.png"))); - primaryStage.setScene(loadScene()); + primaryStage.setScene(loadScene(primaryStage)); primaryStage.show(); } - private Scene loadScene() throws IOException { - FXMLLoader loader = new FXMLLoader(); - loader.setLocation(getClass().getResource("single_layout.fxml")); - return new Scene(loader.load(), 350-10, 174-10); + private Scene loadScene(Stage stage) throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource("single_layout.fxml")); + Scene scene = new Scene(loader.load(), 350-10, 174-10); + MainController controller = loader.getController(); + controller.setStage(stage); + return scene; } } diff --git a/src/main/java/ru/dmitriymx/corrector1s/gui/MainController.java b/src/main/java/ru/dmitriymx/corrector1s/gui/MainController.java new file mode 100644 index 0000000..084c099 --- /dev/null +++ b/src/main/java/ru/dmitriymx/corrector1s/gui/MainController.java @@ -0,0 +1,106 @@ +package ru.dmitriymx.corrector1s.gui; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TextField; +import javafx.scene.layout.Pane; +import javafx.stage.FileChooser; +import javafx.stage.Stage; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Timer; + +public class MainController { + private Stage stage; + @FXML + private TextField sourceFilePath; + @FXML + private TextField saveAsFilePath; + @FXML + private CheckBox saveAsCheckBox; + @FXML + private Button btnSourceFilePath; + @FXML + private Button btnSaveAsFilePath; + @FXML + private Pane mainPane; + @FXML + private Pane waitPane; + @FXML + private ProgressIndicator progressBar; + @FXML + private Button btnStartCorrect; + + private FileChooser buildFileChooser(TextField textField) { + FileChooser fileChooser = new FileChooser(); + + if (!textField.getText().isEmpty() && Files.exists(Paths.get(textField.getText()))) { + File file = new File(textField.getText()); + if (file.isDirectory()) { + fileChooser.setInitialDirectory(file); + } else { + fileChooser.setInitialDirectory(file.getParentFile()); + } + } + + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter( + "Таблицы Excel (*.xls, *.xlsx)", + "*.xls", "*.xlsx")); + + return fileChooser; + } + + @FXML + public void initialize() { + saveAsCheckBox.selectedProperty().addListener((observable, oldValue, newValue) -> { + saveAsFilePath.setDisable(!newValue); + btnSaveAsFilePath.setDisable(!newValue); + }); + + btnSourceFilePath.addEventHandler(ActionEvent.ACTION, event -> { + File file = buildFileChooser(sourceFilePath).showOpenDialog(stage); + if (file != null) { + sourceFilePath.setText(file.getAbsolutePath()); + if (!saveAsCheckBox.selectedProperty().get()) { + saveAsFilePath.setText(file.getAbsolutePath()); + } + } + }); + + btnSaveAsFilePath.addEventHandler(ActionEvent.ACTION, + event -> buildFileChooser(saveAsFilePath).showSaveDialog(stage)); + + btnStartCorrect.addEventHandler(ActionEvent.ACTION, event -> { + mainPane.setDisable(true); + mainPane.setOpacity(0.3d); + waitPane.setVisible(true); + progressBar.setProgress(0d); + + Runnable runnable = () -> { + do { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + break; + } + progressBar.setProgress(progressBar.getProgress() + 0.1d); + } while (progressBar.getProgress() <= 1.0d); + + waitPane.setVisible(false); + mainPane.setOpacity(1.0d); + mainPane.setDisable(false); + }; + Thread thread = new Thread(runnable); + thread.start(); + }); + } + + void setStage(Stage stage) { + this.stage = stage; + } +} diff --git a/src/main/resources/ru/dmitriymx/corrector1s/gui/single_layout.fxml b/src/main/resources/ru/dmitriymx/corrector1s/gui/single_layout.fxml index 6999703..98d4de2 100644 --- a/src/main/resources/ru/dmitriymx/corrector1s/gui/single_layout.fxml +++ b/src/main/resources/ru/dmitriymx/corrector1s/gui/single_layout.fxml @@ -4,31 +4,34 @@ + - - - - - - - - -