feat(search): add collection search menu and filter settings

- add search menu with filter configuration and result actions
- add support for AND and OR filter relations
- add range filters for group number, average grade, and record book number
- update current collection menu to delegate search operations
This commit is contained in:
2026-09-01 13:27:21 +04:00
parent db66ebbc07
commit 84f9e2aa8d
5 changed files with 673 additions and 10 deletions
@@ -4,6 +4,7 @@ import com.googlecode.lanterna.gui2.ActionListBox;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import ru.project.model.AppState;
import ru.project.ui.base.BaseModalWindow;
import ru.project.ui.collection.search.SearchCollectionMenu;
import ru.project.ui.collection.sorting.SortCollectionMenu;
import ru.project.ui.common.CollectionDisplayWindow;
import ru.project.ui.common.CollectionFileSaveWindow;
@@ -13,8 +14,8 @@ public class CurrentCollectionMenu extends BaseModalWindow {
private final AppState state;
private final SortCollectionMenu sortCollectionMenu;
private final SearchCollectionMenu searchCollectionMenu;
// private final SearchCollectionMenu searchCollectionMenu;
// private final CountOccurrencesMenu countOccurrencesMenu;
public CurrentCollectionMenu(WindowBasedTextGUI gui, AppState state) {
@@ -25,18 +26,18 @@ public class CurrentCollectionMenu extends BaseModalWindow {
this.sortCollectionMenu = new SortCollectionMenu(gui, state);
// this.searchCollectionMenu = new SearchCollectionMenu(gui, state);
this.searchCollectionMenu = new SearchCollectionMenu(gui, state);
// this.countCollectionMenu = new CountOccurrencesMenu(gui, state);
ActionListBox menu = new ActionListBox();
menu.addItem("Показать коллекцию...", this::showCurrentCollection);
menu.addItem("Сохранить коллекцию в файл...", this::saveCurrentCollection);
menu.addItem("Меню сортировки коллекции", sortCollectionMenu::showModal);
menu.addItem("Меню поиска элемента в коллекции", this::searchCollection);
menu.addItem("Меню поиска элемента в коллекции", searchCollectionMenu::showModal);
menu.addItem("Меню подсчёта количества вхождений элемента", this::countOccurrences);
@@ -57,12 +58,6 @@ public class CurrentCollectionMenu extends BaseModalWindow {
window.showModal();
}
private void searchCollection() {
// SearchCollectionMenu searchCollectionMenu = new SearchCollectionMenu(gui, state);
//
// searchCollectionMenu.showModal();
}
private void countOccurrences() {
// CountOccurrencesMenu countOccurrencesMenu = new CountOccurrencesMenu(gui, state);
//