diff --git a/app/src/main/java/ru/project/ui/creation/file/FileDataSettingsWindow.java b/app/src/main/java/ru/project/ui/creation/file/FileDataSettingsWindow.java new file mode 100644 index 0000000..bf1b7d4 --- /dev/null +++ b/app/src/main/java/ru/project/ui/creation/file/FileDataSettingsWindow.java @@ -0,0 +1,78 @@ +package ru.project.ui.creation.file; + +import com.googlecode.lanterna.gui2.Button; +import com.googlecode.lanterna.gui2.Label; +import com.googlecode.lanterna.gui2.LinearLayout; +import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import com.googlecode.lanterna.gui2.dialogs.FileDialog; +import com.googlecode.lanterna.gui2.dialogs.FileDialogBuilder; +import java.io.File; +import java.util.function.Consumer; +import ru.project.ui.base.BaseModalWindow; + +public class FileDataSettingsWindow extends BaseModalWindow { + + // private final StudentBuilder studentBuilder; + + private final FileFillSettings settings; + private final Consumer onApply; + + private final Label filePathLabel; + + public FileDataSettingsWindow(WindowBasedTextGUI gui, Consumer onApply) { + + super("Данные из файла", gui); + + this.onApply = onApply; + + this.settings = new FileFillSettings(); + // this.studentBuilder = new StudentBuilder(); + + Panel panel = new Panel(); + panel.setLayoutManager(new LinearLayout()); + + filePathLabel = new Label("Абсолютный путь: " + getFilePathLabel()); + + panel.addComponent(filePathLabel); + + panel.addComponent(new Button("Выбрать файл", this::selectFile)); + + panel.addComponent(new Button("Применить", this::apply)); + + panel.addComponent(new Button("Выйти", this::close)); + + setComponent(panel); + } + + private void selectFile() { + FileDialog fileDialog = + new FileDialogBuilder() + .setTitle("Выбор файла") + .setDescription("Выберите файл:") + .setActionLabel("Открыть") + .build(); + + File selectedFile = fileDialog.showDialog(gui); + + if (selectedFile == null) { + return; + } + + settings.setAbsoluteFilePath(selectedFile.getAbsolutePath()); + + filePathLabel.setText("Абсолютный путь: " + settings.getAbsoluteFilePath()); + } + + private void apply() { + onApply.accept(settings); + + close(); + } + + private String getFilePathLabel() { + String filePath = settings.getAbsoluteFilePath(); + + return filePath == null || filePath.isBlank() ? "не задан" : filePath; + } +} diff --git a/app/src/main/java/ru/project/ui/creation/file/FileFillSettings.java b/app/src/main/java/ru/project/ui/creation/file/FileFillSettings.java new file mode 100644 index 0000000..db7e9cc --- /dev/null +++ b/app/src/main/java/ru/project/ui/creation/file/FileFillSettings.java @@ -0,0 +1,18 @@ +package ru.project.ui.creation.file; + +public class FileFillSettings { + + private String absoluteFilePath; + + public FileFillSettings() { + this.absoluteFilePath = null; + } + + public String getAbsoluteFilePath() { + return absoluteFilePath; + } + + public void setAbsoluteFilePath(String absoluteFilePath) { + this.absoluteFilePath = absoluteFilePath; + } +} diff --git a/app/src/main/java/ru/project/ui/creation/file/FileFillStrategy.java b/app/src/main/java/ru/project/ui/creation/file/FileFillStrategy.java new file mode 100644 index 0000000..51f14f8 --- /dev/null +++ b/app/src/main/java/ru/project/ui/creation/file/FileFillStrategy.java @@ -0,0 +1,19 @@ +package ru.project.ui.creation.file; + +import ru.project.collection.MyList; +import ru.project.student.Student; +import ru.project.ui.creation.FillStrategy; + +public class FileFillStrategy implements FillStrategy { + + // private final FileFillSettings settings; + + public FileFillStrategy(FileFillSettings settings) { + // this.settings = settings; + } + + @Override + public MyList create() { + return null; + } +} diff --git a/app/src/main/java/ru/project/ui/creation/file/FilePathType.java b/app/src/main/java/ru/project/ui/creation/file/FilePathType.java new file mode 100644 index 0000000..a460446 --- /dev/null +++ b/app/src/main/java/ru/project/ui/creation/file/FilePathType.java @@ -0,0 +1,6 @@ +package ru.project.ui.creation.file; + +public enum FilePathType { + ABSOLUTE, + RELATIVE +} diff --git a/app/src/main/java/ru/project/ui/creation/file/FilePathTypeSelectionWindow.java b/app/src/main/java/ru/project/ui/creation/file/FilePathTypeSelectionWindow.java new file mode 100644 index 0000000..83dfd4a --- /dev/null +++ b/app/src/main/java/ru/project/ui/creation/file/FilePathTypeSelectionWindow.java @@ -0,0 +1,34 @@ +package ru.project.ui.creation.file; + +import com.googlecode.lanterna.gui2.ActionListBox; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import java.util.function.Consumer; +import ru.project.ui.base.BaseModalWindow; + +public class FilePathTypeSelectionWindow extends BaseModalWindow { + + private final Consumer onPathTypeSelected; + + public FilePathTypeSelectionWindow( + WindowBasedTextGUI gui, Consumer onPathTypeSelected) { + + super("Выбор типа пути", gui); + + this.onPathTypeSelected = onPathTypeSelected; + + ActionListBox menu = new ActionListBox(); + + menu.addItem("Абсолютный", () -> selectPathType(FilePathType.ABSOLUTE)); + + menu.addItem("Относительный", () -> selectPathType(FilePathType.RELATIVE)); + + menu.addItem("Выйти", this::close); + + setComponent(menu); + } + + private void selectPathType(FilePathType pathType) { + onPathTypeSelected.accept(pathType); + close(); + } +}