From d97f1a846bb872db8a0954c2214fb0a757542e8b Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 4 Oct 2025 15:13:22 -0400 Subject: Initial version mostly working --- .../java/design/controller/userinput/Menu.java | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/design/controller/userinput/Menu.java (limited to 'src/main/java/design/controller/userinput/Menu.java') diff --git a/src/main/java/design/controller/userinput/Menu.java b/src/main/java/design/controller/userinput/Menu.java new file mode 100644 index 0000000..407d2ca --- /dev/null +++ b/src/main/java/design/controller/userinput/Menu.java @@ -0,0 +1,54 @@ +package design.controller.userinput; + +import java.util.*; + +public class Menu { + private final String title; + private final List menuOptions; + + public Menu(String title, List menuOptions) { + this.title = title; + this.menuOptions = menuOptions; + } + + public Menu(String title) { + this.title = title; + this.menuOptions = new ArrayList<>(); + } + + public boolean remove(MenuOption menuOption) { + return menuOptions.remove(menuOption); + } + + public boolean addAll(List c) { + return menuOptions.addAll(c); + } + + public boolean addAll(MenuOption... c) { + return addAll(Arrays.stream(c).toList()); + } + + public boolean add(MenuOption menuOption) { + return menuOptions.add(menuOption); + } + + public void present() { + System.out.printf("-- %s --\n", title.toUpperCase()); + for (int i = 0; i < menuOptions.size(); i++) { + MenuOption menuOption = menuOptions.get(i); + System.out.printf("%s: %s\n", i, menuOption.getName()); + } + Scanner sc = new Scanner(System.in); + var line = sc.nextLine(); + var split = line.split(" "); + + try { + int i = Integer.parseInt(split[0]); + menuOptions.get(i).onCommand(Arrays.copyOfRange(split, 1, split.length)); + } catch (Exception ex) { + System.err.printf("Invalid option \"%s\"\n", line); + present(); + } + } + +} -- cgit v1.2.3 From 75ef9ca83d43051616c0083af85eacbd71b4b4b6 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sun, 5 Oct 2025 14:06:20 -0400 Subject: Reorganize menu api --- .../java/design/controller/userinput/Menu.java | 34 ++++------------------ 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'src/main/java/design/controller/userinput/Menu.java') diff --git a/src/main/java/design/controller/userinput/Menu.java b/src/main/java/design/controller/userinput/Menu.java index 407d2ca..7677793 100644 --- a/src/main/java/design/controller/userinput/Menu.java +++ b/src/main/java/design/controller/userinput/Menu.java @@ -2,38 +2,14 @@ package design.controller.userinput; import java.util.*; -public class Menu { - private final String title; - private final List menuOptions; +public abstract class Menu { + public abstract String getTitle(); - public Menu(String title, List menuOptions) { - this.title = title; - this.menuOptions = menuOptions; - } - - public Menu(String title) { - this.title = title; - this.menuOptions = new ArrayList<>(); - } - - public boolean remove(MenuOption menuOption) { - return menuOptions.remove(menuOption); - } - - public boolean addAll(List c) { - return menuOptions.addAll(c); - } - - public boolean addAll(MenuOption... c) { - return addAll(Arrays.stream(c).toList()); - } - - public boolean add(MenuOption menuOption) { - return menuOptions.add(menuOption); - } + public abstract List getMenuOptions(); public void present() { - System.out.printf("-- %s --\n", title.toUpperCase()); + var menuOptions = getMenuOptions(); + System.out.printf("-- %s --\n", getTitle().toUpperCase()); for (int i = 0; i < menuOptions.size(); i++) { MenuOption menuOption = menuOptions.get(i); System.out.printf("%s: %s\n", i, menuOption.getName()); -- cgit v1.2.3