diff --git a/app/src/main/java/ru/project/model/SortMethod.java b/app/src/main/java/ru/project/model/SortMethod.java new file mode 100644 index 0000000..8cf4c6e --- /dev/null +++ b/app/src/main/java/ru/project/model/SortMethod.java @@ -0,0 +1,6 @@ +package ru.project.model; + +public enum SortMethod { + NORMAL, + PARITY +} diff --git a/app/src/main/java/ru/project/ui/menu/MainMenu.java b/app/src/main/java/ru/project/ui/menu/MainMenu.java index 93cef48..32999d7 100644 --- a/app/src/main/java/ru/project/ui/menu/MainMenu.java +++ b/app/src/main/java/ru/project/ui/menu/MainMenu.java @@ -14,11 +14,13 @@ public class MainMenu extends BaseModalWindow { private final ActionListBox menu; private final BaseModalWindow createCollectionMenu; + private final BaseModalWindow sortCollectionMenu; public MainMenu(WindowBasedTextGUI gui, AppState state) { super("Главное меню", gui); this.createCollectionMenu = new CreateCollectionMenu(gui, state); + this.sortCollectionMenu = new SortCollectionMenu(gui, state); menu = new ActionListBox(); @@ -57,8 +59,7 @@ public class MainMenu extends BaseModalWindow { } private void sortCollection() { - // TODO - MessageWindow.showModal(gui, "Не реализовано."); + sortCollectionMenu.showModal(); } private void searchCollection() { diff --git a/app/src/main/java/ru/project/ui/menu/SortCollectionMenu.java b/app/src/main/java/ru/project/ui/menu/SortCollectionMenu.java new file mode 100644 index 0000000..5c9ea61 --- /dev/null +++ b/app/src/main/java/ru/project/ui/menu/SortCollectionMenu.java @@ -0,0 +1,101 @@ +package ru.project.ui.menu; + +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 ru.project.model.AppState; +import ru.project.model.SortMethod; +import ru.project.ui.base.BaseModalWindow; +import ru.project.ui.window.MessageWindow; +import ru.project.ui.window.SortMethodSelectionWindow; + +public class SortCollectionMenu extends BaseModalWindow { + + private final AppState state; + + private final Label sortMethodLabel; + private final SortMethodSelectionWindow sortMethodSelectionWindow; + + private SortMethod selectedSortMethod; + + public SortCollectionMenu(WindowBasedTextGUI gui, AppState state) { + + super("Меню сортировки текущей коллекции", gui); + + this.state = state; + this.selectedSortMethod = SortMethod.NORMAL; + + Panel panel = new Panel(); + panel.setLayoutManager(new LinearLayout()); + + this.sortMethodLabel = new Label("Способ сортировки: " + getSortMethodName(selectedSortMethod)); + + this.sortMethodSelectionWindow = + new SortMethodSelectionWindow( + gui, + sortMethod -> { + selectedSortMethod = sortMethod; + + sortMethodLabel.setText( + "Способ сортировки: " + getSortMethodName(selectedSortMethod)); + }); + + panel.addComponent(sortMethodLabel); + + panel.addComponent(new Button("Выбрать способ сортировки", this::selectSortMethod)); + + panel.addComponent( + new Button("Настроить текущий способ сортировки", this::setupCurrentSortMethod)); + + panel.addComponent(new Button("Сортировать текущую коллекцию", this::sortCurrentCollection)); + + panel.addComponent(new Button("Выйти", this::close)); + + setComponent(panel); + } + + private void setupCurrentSortMethod() { + MessageWindow.showModal(gui, "Настройка способа сортировки пока не реализована."); + } + + private void selectSortMethod() { + sortMethodSelectionWindow.showModal(); + } + + private void sortCurrentCollection() { + if (state.getMainCollection() == null || state.getMainCollection().isEmpty()) { + + MessageWindow.showModal(gui, "Текущая коллекция пуста."); + return; + } + + switch (selectedSortMethod) { + case NORMAL: + sortNormally(); + break; + + case PARITY: + sortByParity(); + break; + } + } + + private void sortNormally() { + // TODO + MessageWindow.showModal(gui, "Обычная сортировка не реализована."); + } + + private void sortByParity() { + // TODO + MessageWindow.showModal(gui, "Сортировка по чётности не реализована."); + } + + private String getSortMethodName(SortMethod sortMethod) { + return switch (sortMethod) { + case NORMAL -> "Обычная сортировка"; + case PARITY -> "Сортировка по чётности"; + }; + } +} diff --git a/app/src/main/java/ru/project/ui/window/SortMethodSelectionWindow.java b/app/src/main/java/ru/project/ui/window/SortMethodSelectionWindow.java new file mode 100644 index 0000000..ea234ef --- /dev/null +++ b/app/src/main/java/ru/project/ui/window/SortMethodSelectionWindow.java @@ -0,0 +1,33 @@ +package ru.project.ui.window; + +import com.googlecode.lanterna.gui2.ActionListBox; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import java.util.function.Consumer; +import ru.project.model.SortMethod; +import ru.project.ui.base.BaseModalWindow; + +public class SortMethodSelectionWindow extends BaseModalWindow { + + private final Consumer onSortMethodSelected; + + public SortMethodSelectionWindow( + WindowBasedTextGUI gui, Consumer onSortMethodSelected) { + + super("Выбрать способ сортировки", gui); + + this.onSortMethodSelected = onSortMethodSelected; + + ActionListBox menu = new ActionListBox(); + + menu.addItem("Обычная сортировка", () -> selectSortMethod(SortMethod.NORMAL)); + + menu.addItem("Сортировка по чётности", () -> selectSortMethod(SortMethod.PARITY)); + + setComponent(menu); + } + + private void selectSortMethod(SortMethod sortMethod) { + onSortMethodSelected.accept(sortMethod); + close(); + } +}