2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
8 package eu.svjatoslav.sixth.e3d.gui.humaninput;
10 import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
12 import java.util.Stack;
14 public class KeyboardFocusStack {
16 private final ViewPanel viewPanel;
17 private WorldNavigationUserInputTracker defaultInputHandler = new WorldNavigationUserInputTracker();
18 private Stack<UserInputHandler> inputHandlers = new Stack<>();
19 private UserInputHandler currentUserInputHandler;
21 public KeyboardFocusStack(final ViewPanel viewPanel) {
22 this.viewPanel = viewPanel;
23 pushFocusOwner(defaultInputHandler);
26 public UserInputHandler getCurrentFocusOwner() {
27 return currentUserInputHandler;
30 public void popFocusOwner() {
31 if (currentUserInputHandler != null)
32 currentUserInputHandler.focusLost(viewPanel);
34 if (inputHandlers.isEmpty())
37 currentUserInputHandler = inputHandlers.pop();
38 currentUserInputHandler.focusReceived(viewPanel);
41 public boolean pushFocusOwner(final UserInputHandler newInputHandler) {
42 boolean updateNeeded = false;
44 if (currentUserInputHandler == newInputHandler)
47 if (currentUserInputHandler != null) {
48 updateNeeded = currentUserInputHandler.focusLost(viewPanel);
49 inputHandlers.push(currentUserInputHandler);
52 currentUserInputHandler = newInputHandler;
53 updateNeeded |= currentUserInputHandler.focusReceived(viewPanel);