package be.nikiroo.jvcard.tui.windows; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jexer.TAction; import jexer.TApplication; import jexer.TKeypress; import jexer.TWindow; import jexer.event.TKeypressEvent; import be.nikiroo.jvcard.tui.TuiLauncherJexer; /** * A basic window for using with jVCard. * * @author niki */ public abstract class TuiBasicWindow extends TWindow { private TApplication app; private Map keyBindings; private List closeListeners; /** * Create a new window with the given title. * * @param app * the application that will manage this window * @param title * the window title */ public TuiBasicWindow(TApplication app, String title) { // Note: will not support screen with less than 10x10 super(app, title, // Math.min(36, app.getScreen().getWidth() - 9), // Math.min(16, app.getScreen().getHeight() - 9) // ); this.app = app; keyBindings = new HashMap(); closeListeners = new ArrayList(); if (TuiLauncherJexer.FULLSCREEN) { setFullscreen(true); } } /** * Add a key binding, that is, describe a key to press and its action on he * window. * * @param key * the key to press * @param action * the action */ public void addKeyBinding(TKeypress key, TAction action) { keyBindings.put(key, action); } /** * Add a close listener on this window that will be called when the window * closes. * * @param listener * the listener */ public void addCloseListener(TAction listener) { closeListeners.add(listener); } /** * Close the window. */ public void close() { app.closeWindow(this); } @Override public void onClose() { super.onClose(); for (TAction listener : closeListeners) { listener.DO(); } } @Override public void onKeypress(TKeypressEvent keypress) { if (keyBindings.containsKey(keypress.getKey())) { keyBindings.get(keypress.getKey()).DO(); } else { super.onKeypress(keypress); } } }