refactor(view): reuse base views and decouple menu actions
This commit is contained in:
@@ -1,47 +1,27 @@
|
|||||||
package ru.project.view;
|
package ru.project.view;
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.BasicWindow;
|
|
||||||
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.collection.MyList;
|
import ru.project.collection.MyList;
|
||||||
import ru.project.student.Student;
|
import ru.project.student.Student;
|
||||||
|
|
||||||
public class CollectionView {
|
public class CollectionView extends PanelView {
|
||||||
|
|
||||||
public void showCollection(WindowBasedTextGUI gui, MyList<Student> collection) {
|
public CollectionView() {
|
||||||
BasicWindow window = new BasicWindow("Текущая коллекция");
|
super("Текущая коллекция");
|
||||||
|
}
|
||||||
Panel panel = new Panel();
|
|
||||||
panel.setLayoutManager(new LinearLayout());
|
|
||||||
|
|
||||||
|
public void showCollection(MyList<Student> collection) {
|
||||||
for (int i = 0; i < collection.size(); i++) {
|
for (int i = 0; i < collection.size(); i++) {
|
||||||
Student student = collection.get(i);
|
Student student = collection.get(i);
|
||||||
|
|
||||||
panel.addComponent(new Label((i + 1) + ". " + student));
|
addLabel((i + 1) + ". " + student);
|
||||||
}
|
}
|
||||||
|
|
||||||
panel.addComponent(new Button("Вернуться", window::close));
|
addButton("Выйти", this::close);
|
||||||
|
|
||||||
window.setComponent(panel);
|
|
||||||
|
|
||||||
gui.addWindowAndWait(window);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showEmptyMessage(WindowBasedTextGUI gui) {
|
public void showEmptyMessage() {
|
||||||
BasicWindow window = new BasicWindow("Текущая коллекция");
|
addLabel("Текущая коллекция пуста.");
|
||||||
|
|
||||||
Panel panel = new Panel();
|
addButton("Выйти", this::close);
|
||||||
panel.setLayoutManager(new LinearLayout());
|
|
||||||
|
|
||||||
panel.addComponent(new Label("Текущая коллекция пуста."));
|
|
||||||
|
|
||||||
panel.addComponent(new Button("Вернуться", window::close));
|
|
||||||
|
|
||||||
window.setComponent(panel);
|
|
||||||
|
|
||||||
gui.addWindowAndWait(window);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,62 +1,59 @@
|
|||||||
package ru.project.view;
|
package ru.project.view;
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.ActionListBox;
|
|
||||||
import com.googlecode.lanterna.gui2.BasicWindow;
|
|
||||||
import com.googlecode.lanterna.gui2.LinearLayout;
|
|
||||||
import com.googlecode.lanterna.gui2.Panel;
|
|
||||||
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
|
|
||||||
|
|
||||||
public class MainView {
|
public class MainView extends ActionListView {
|
||||||
|
|
||||||
private final BasicWindow window;
|
private Runnable showCollectionAction = this::defaultAction;
|
||||||
private final ActionListBox menu;
|
private Runnable createCollectionAction = this::defaultAction;
|
||||||
|
private Runnable saveCollectionAction = this::defaultAction;
|
||||||
|
private Runnable sortCollectionAction = this::defaultAction;
|
||||||
|
private Runnable searchCollectionAction = this::defaultAction;
|
||||||
|
private Runnable countOccurrencesAction = this::defaultAction;
|
||||||
|
private Runnable exitAction = this::defaultAction;
|
||||||
|
|
||||||
public MainView() {
|
public MainView() {
|
||||||
window = new BasicWindow("Главное меню");
|
super("Главное меню");
|
||||||
|
|
||||||
Panel panel = new Panel();
|
addItem("Показать текущую коллекцию", () -> showCollectionAction.run());
|
||||||
panel.setLayoutManager(new LinearLayout());
|
|
||||||
|
|
||||||
menu = new ActionListBox();
|
addItem("Меню создания новой коллекции", () -> createCollectionAction.run());
|
||||||
|
|
||||||
panel.addComponent(menu);
|
addItem("Меню сохранения текущей коллекции в файл", () -> saveCollectionAction.run());
|
||||||
|
|
||||||
window.setComponent(panel);
|
addItem("Меню сортировки текущей коллекции", () -> sortCollectionAction.run());
|
||||||
|
|
||||||
|
addItem("Меню поиска элемента в текущей коллекции", () -> searchCollectionAction.run());
|
||||||
|
|
||||||
|
addItem("Меню подсчёта количества вхождений элемента", () -> countOccurrencesAction.run());
|
||||||
|
|
||||||
|
addItem("Завершить выполнение программы", () -> exitAction.run());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setShowCollectionAction(Runnable action) {
|
public void setShowCollectionAction(Runnable action) {
|
||||||
menu.addItem("Показать текущую коллекцию", action);
|
showCollectionAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCreateCollectionAction(Runnable action) {
|
public void setCreateCollectionAction(Runnable action) {
|
||||||
menu.addItem("Меню создания новой коллекции", action);
|
createCollectionAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSaveCollectionAction(Runnable action) {
|
public void setSaveCollectionAction(Runnable action) {
|
||||||
menu.addItem("Меню сохранения текущей коллекции в файл", action);
|
saveCollectionAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSortCollectionAction(Runnable action) {
|
public void setSortCollectionAction(Runnable action) {
|
||||||
menu.addItem("Меню сортировки текущей коллекции", action);
|
sortCollectionAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSearchCollectionAction(Runnable action) {
|
public void setSearchCollectionAction(Runnable action) {
|
||||||
menu.addItem("Меню поиска элемента в текущей коллекции", action);
|
searchCollectionAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCountOccurrencesAction(Runnable action) {
|
public void setCountOccurrencesAction(Runnable action) {
|
||||||
menu.addItem("Меню подсчёта количества вхождений элемента", action);
|
countOccurrencesAction = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExitAction(Runnable action) {
|
public void setExitAction(Runnable action) {
|
||||||
menu.addItem("Завершить выполнение программы", action);
|
exitAction = action;
|
||||||
}
|
|
||||||
|
|
||||||
public void show(WindowBasedTextGUI gui) {
|
|
||||||
gui.addWindowAndWait(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
window.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user