From a139fa10c6765498d0dd147a47e8b4e16055af2d 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: Tue, 25 Aug 2026 17:14:32 +0400 Subject: [PATCH] feat(ui): add main menu and navigation skeleton --- app/pom.xml | 20 +++++++++ app/src/main/java/ru/project/App.java | 33 ++++++++++++--- .../java/ru/project/ui/CollectionView.java | 8 ++++ .../ru/project/ui/CountOccurrencesMenu.java | 8 ++++ .../ru/project/ui/CreateCollectionMenu.java | 8 ++++ .../main/java/ru/project/ui/EmptyMenu.java | 23 +++++++++++ app/src/main/java/ru/project/ui/MainMenu.java | 34 +++++++++++++++ .../main/java/ru/project/ui/Navigator.java | 41 +++++++++++++++++++ .../ru/project/ui/SaveCollectionMenu.java | 8 ++++ .../java/ru/project/ui/SearchElementMenu.java | 8 ++++ .../ru/project/ui/SortCollectionMenu.java | 8 ++++ 11 files changed, 193 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/ru/project/ui/CollectionView.java create mode 100644 app/src/main/java/ru/project/ui/CountOccurrencesMenu.java create mode 100644 app/src/main/java/ru/project/ui/CreateCollectionMenu.java create mode 100644 app/src/main/java/ru/project/ui/EmptyMenu.java create mode 100644 app/src/main/java/ru/project/ui/MainMenu.java create mode 100644 app/src/main/java/ru/project/ui/Navigator.java create mode 100644 app/src/main/java/ru/project/ui/SaveCollectionMenu.java create mode 100644 app/src/main/java/ru/project/ui/SearchElementMenu.java create mode 100644 app/src/main/java/ru/project/ui/SortCollectionMenu.java diff --git a/app/pom.xml b/app/pom.xml index 509e563..5afca24 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -41,6 +41,13 @@ junit-jupiter-params test + + + com.googlecode.lanterna + lanterna + 3.1.5 + + @@ -91,5 +98,18 @@ + + + + org.codehaus.mojo + exec-maven-plugin + 3.6.3 + + + ru.project.App + + + + diff --git a/app/src/main/java/ru/project/App.java b/app/src/main/java/ru/project/App.java index 8fd4c39..bf57afc 100644 --- a/app/src/main/java/ru/project/App.java +++ b/app/src/main/java/ru/project/App.java @@ -1,10 +1,31 @@ package ru.project; -/** - * Hello world! - */ -public class App { - public static void main(String[] args) { - System.out.println("Hello World!"); +import com.googlecode.lanterna.gui2.MultiWindowTextGUI; +import com.googlecode.lanterna.screen.Screen; +import com.googlecode.lanterna.screen.TerminalScreen; +import com.googlecode.lanterna.terminal.DefaultTerminalFactory; +import ru.project.ui.MainMenu; +import ru.project.ui.Navigator; + +public final class App { + + private App() {} + + public static void main(String[] args) throws Exception { + DefaultTerminalFactory factory = new DefaultTerminalFactory(); + + Screen screen = new TerminalScreen(factory.createTerminal()); + + screen.startScreen(); + + try { + MultiWindowTextGUI gui = new MultiWindowTextGUI(screen); + + Navigator navigator = new Navigator(gui); + + gui.addWindowAndWait(new MainMenu(navigator)); + } finally { + screen.stopScreen(); } + } } diff --git a/app/src/main/java/ru/project/ui/CollectionView.java b/app/src/main/java/ru/project/ui/CollectionView.java new file mode 100644 index 0000000..82b9540 --- /dev/null +++ b/app/src/main/java/ru/project/ui/CollectionView.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class CollectionView extends EmptyMenu { + + public CollectionView() { + super("Текущая коллекция"); + } +} diff --git a/app/src/main/java/ru/project/ui/CountOccurrencesMenu.java b/app/src/main/java/ru/project/ui/CountOccurrencesMenu.java new file mode 100644 index 0000000..db8e0c8 --- /dev/null +++ b/app/src/main/java/ru/project/ui/CountOccurrencesMenu.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class CountOccurrencesMenu extends EmptyMenu { + + public CountOccurrencesMenu() { + super("Подсчёт количества вхождений"); + } +} diff --git a/app/src/main/java/ru/project/ui/CreateCollectionMenu.java b/app/src/main/java/ru/project/ui/CreateCollectionMenu.java new file mode 100644 index 0000000..6ea56fc --- /dev/null +++ b/app/src/main/java/ru/project/ui/CreateCollectionMenu.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class CreateCollectionMenu extends EmptyMenu { + + public CreateCollectionMenu() { + super("Создание новой коллекции"); + } +} diff --git a/app/src/main/java/ru/project/ui/EmptyMenu.java b/app/src/main/java/ru/project/ui/EmptyMenu.java new file mode 100644 index 0000000..0385780 --- /dev/null +++ b/app/src/main/java/ru/project/ui/EmptyMenu.java @@ -0,0 +1,23 @@ +package ru.project.ui; + +import com.googlecode.lanterna.gui2.BasicWindow; +import com.googlecode.lanterna.gui2.Button; +import com.googlecode.lanterna.gui2.Direction; +import com.googlecode.lanterna.gui2.Label; +import com.googlecode.lanterna.gui2.LinearLayout; +import com.googlecode.lanterna.gui2.Panel; + +public abstract class EmptyMenu extends BasicWindow { + + protected EmptyMenu(String title) { + super(title); + + Panel panel = new Panel(new LinearLayout(Direction.VERTICAL)); + + panel.addComponent(new Label("Раздел находится в разработке")); + + panel.addComponent(new Button("Назад", this::close)); + + setComponent(panel); + } +} diff --git a/app/src/main/java/ru/project/ui/MainMenu.java b/app/src/main/java/ru/project/ui/MainMenu.java new file mode 100644 index 0000000..361ce13 --- /dev/null +++ b/app/src/main/java/ru/project/ui/MainMenu.java @@ -0,0 +1,34 @@ +package ru.project.ui; + +import com.googlecode.lanterna.gui2.BasicWindow; +import com.googlecode.lanterna.gui2.Button; +import com.googlecode.lanterna.gui2.Direction; +import com.googlecode.lanterna.gui2.LinearLayout; +import com.googlecode.lanterna.gui2.Panel; + +public class MainMenu extends BasicWindow { + + public MainMenu(Navigator navigator) { + super("ГЛАВНОЕ МЕНЮ"); + + Panel panel = new Panel(new LinearLayout(Direction.VERTICAL)); + + panel.addComponent(new Button("Показать текущую коллекцию", navigator::showCollectionView)); + + panel.addComponent(new Button("Создать новую коллекцию", navigator::showCreateCollection)); + + panel.addComponent( + new Button("Сохранить текущую коллекцию в файл", navigator::showSaveCollection)); + + panel.addComponent(new Button("Сортировать текущую коллекцию", navigator::showSortCollection)); + + panel.addComponent(new Button("Найти элемент", navigator::showSearchElement)); + + panel.addComponent( + new Button("Подсчитать количество вхождений", navigator::showCountOccurrences)); + + panel.addComponent(new Button("Завершить выполнение программы", this::close)); + + setComponent(panel); + } +} diff --git a/app/src/main/java/ru/project/ui/Navigator.java b/app/src/main/java/ru/project/ui/Navigator.java new file mode 100644 index 0000000..13489c1 --- /dev/null +++ b/app/src/main/java/ru/project/ui/Navigator.java @@ -0,0 +1,41 @@ +package ru.project.ui; + +import com.googlecode.lanterna.gui2.BasicWindow; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; + +public class Navigator { + + private final WindowBasedTextGUI gui; + + public Navigator(WindowBasedTextGUI gui) { + this.gui = gui; + } + + public void show(BasicWindow window) { + gui.addWindowAndWait(window); + } + + public void showCollectionView() { + show(new CollectionView()); + } + + public void showCreateCollection() { + show(new CreateCollectionMenu()); + } + + public void showSaveCollection() { + show(new SaveCollectionMenu()); + } + + public void showSortCollection() { + show(new SortCollectionMenu()); + } + + public void showSearchElement() { + show(new SearchElementMenu()); + } + + public void showCountOccurrences() { + show(new CountOccurrencesMenu()); + } +} diff --git a/app/src/main/java/ru/project/ui/SaveCollectionMenu.java b/app/src/main/java/ru/project/ui/SaveCollectionMenu.java new file mode 100644 index 0000000..cc0f36a --- /dev/null +++ b/app/src/main/java/ru/project/ui/SaveCollectionMenu.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class SaveCollectionMenu extends EmptyMenu { + + public SaveCollectionMenu() { + super("Сохранение текущей коллекции"); + } +} diff --git a/app/src/main/java/ru/project/ui/SearchElementMenu.java b/app/src/main/java/ru/project/ui/SearchElementMenu.java new file mode 100644 index 0000000..7e92c4f --- /dev/null +++ b/app/src/main/java/ru/project/ui/SearchElementMenu.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class SearchElementMenu extends EmptyMenu { + + public SearchElementMenu() { + super("Поиск элемента"); + } +} diff --git a/app/src/main/java/ru/project/ui/SortCollectionMenu.java b/app/src/main/java/ru/project/ui/SortCollectionMenu.java new file mode 100644 index 0000000..68e6a7a --- /dev/null +++ b/app/src/main/java/ru/project/ui/SortCollectionMenu.java @@ -0,0 +1,8 @@ +package ru.project.ui; + +public class SortCollectionMenu extends EmptyMenu { + + public SortCollectionMenu() { + super("Сортировка текущей коллекции"); + } +}