From bce5707f5e9725232086b59142f5bd775714af83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=93=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D0=BD?= Date: Fri, 28 Aug 2026 19:35:33 +0400 Subject: [PATCH] feat: add input value window Add a reusable window for entering and editing values. --- .../ui/window/CollectionSizeInputWindow.java | 54 ------------------ .../project/ui/window/InputValueWindow.java | 56 +++++++++++++++++++ 2 files changed, 56 insertions(+), 54 deletions(-) delete mode 100644 app/src/main/java/ru/project/ui/window/CollectionSizeInputWindow.java create mode 100644 app/src/main/java/ru/project/ui/window/InputValueWindow.java diff --git a/app/src/main/java/ru/project/ui/window/CollectionSizeInputWindow.java b/app/src/main/java/ru/project/ui/window/CollectionSizeInputWindow.java deleted file mode 100644 index 25b7775..0000000 --- a/app/src/main/java/ru/project/ui/window/CollectionSizeInputWindow.java +++ /dev/null @@ -1,54 +0,0 @@ -package ru.project.ui.window; - -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.TextBox; -import com.googlecode.lanterna.gui2.WindowBasedTextGUI; -import java.util.function.IntConsumer; -import ru.project.ui.base.BaseWindow; - -public class CollectionSizeInputWindow extends BaseWindow { - - private final TextBox sizeTextBox; - private final IntConsumer onSizeEntered; - - public CollectionSizeInputWindow(WindowBasedTextGUI gui, IntConsumer onSizeEntered) { - - super("Задать размер", gui); - - this.onSizeEntered = onSizeEntered; - - Panel panel = new Panel(); - panel.setLayoutManager(new LinearLayout()); - - panel.addComponent(new Label("Введите размер:")); - - sizeTextBox = new TextBox(); - panel.addComponent(sizeTextBox); - - panel.addComponent(new Button("Подтвердить", this::handleSizeEntered)); - - panel.addComponent(new Button("Выйти", this::close)); - - setComponent(panel); - } - - private void handleSizeEntered() { - try { - int size = Integer.parseInt(sizeTextBox.getText().trim()); - - if (size <= 0) { - MessageWindow.create(gui, "Размер должен быть больше 0."); - return; - } - - close(); - onSizeEntered.accept(size); - - } catch (NumberFormatException e) { - MessageWindow.create(gui, "Введите целое число."); - } - } -} diff --git a/app/src/main/java/ru/project/ui/window/InputValueWindow.java b/app/src/main/java/ru/project/ui/window/InputValueWindow.java new file mode 100644 index 0000000..d21a79b --- /dev/null +++ b/app/src/main/java/ru/project/ui/window/InputValueWindow.java @@ -0,0 +1,56 @@ +package ru.project.ui.window; + +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.TextBox; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import java.util.function.Predicate; +import ru.project.ui.base.BaseWindow; + +public class InputValueWindow extends BaseWindow { + + private final TextBox textBox; + private final Predicate onSave; + + public InputValueWindow( + WindowBasedTextGUI gui, + String title, + String prompt, + String initialValue, + Predicate onSave) { + + super(title, gui); + + this.onSave = onSave; + + Panel panel = new Panel(); + panel.setLayoutManager(new LinearLayout()); + + panel.addComponent(new Label(prompt)); + + textBox = new TextBox(initialValue == null ? "" : initialValue); + + panel.addComponent(textBox); + + panel.addComponent(new Button("Сохранить", this::save)); + + panel.addComponent(new Button("Отмена", this::close)); + + setComponent(panel); + } + + private void save() { + String value = textBox.getText().trim(); + + if (value.isEmpty()) { + MessageWindow.show(gui, "Значение не может быть пустым."); + return; + } + + if (onSave.test(value)) { + close(); + } + } +}