import java.io.UnsupportedEncodingException;
import java.util.List;
+import jexer.TAction;
import jexer.TApplication;
-import jexer.TWindow;
+import be.nikiroo.jvcard.tui.windows.TuiBrowserWindow;
import be.nikiroo.jvcard.tui.windows.TuiFileListWindow;
/**
* @author niki
*/
public class TuiLauncherJexer extends TApplication {
+ /**
+ * Application is in fullscreen mode, no windows.
+ */
+ static public final boolean FULLSCREEN = true;
/**
* @param textMode
addFileMenu();
addWindowMenu();
- @SuppressWarnings("unused")
- TWindow w = new TuiFileListWindow(this, files);
+ // TODO investigate why that is
+ if (backend(textMode) == BackendType.SWING) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ showMainWindow(files);
+ }
+ }).start();
+ } else {
+ showMainWindow(files);
+ }
+ }
+
+ private void showMainWindow(final List<String> files) {
+ TuiBrowserWindow main = new TuiFileListWindow(TuiLauncherJexer.this,
+ files);
+ main.addCloseListener(new TAction() {
+ @Override
+ public void DO() {
+ TuiLauncherJexer.this.exit(false);
+ }
+ });
}
/**
--- /dev/null
+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<TKeypress, TAction> keyBindings;
+ private List<TAction> 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<TKeypress, TAction>();
+ closeListeners = new ArrayList<TAction>();
+
+ 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);
+ }
+ }
+}
package be.nikiroo.jvcard.tui.windows;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import jexer.TAction;
import jexer.TApplication;
-import jexer.TKeypress;
import jexer.TTable;
-import jexer.TWindow;
-import jexer.event.TKeypressEvent;
import jexer.event.TResizeEvent;
import be.nikiroo.jvcard.tui.panes.MainContent;
-public abstract class TuiBrowserWindow extends TWindow {
- private TApplication app;
+public abstract class TuiBrowserWindow extends TuiBasicWindow {
private TTable table;
private boolean showHeader;
- private Map<TKeypress, TAction> keyBindings;
public TuiBrowserWindow(TApplication app, String title, boolean showHeaders) {
- super(app, title, 10, 10);
+ super(app, title);
- this.app = app;
this.showHeader = showHeaders;
- table = new TTable(this, 0, 0, getWidth(), getHeight(), new TAction() {
- @Override
- public void DO() {
- onAction(table.getSelectedLine(), table.getSelectedColumn());
- }
- }, null);
-
- keyBindings = new HashMap<TKeypress, TAction>();
-
- // TODO: fullscreen selection?
-
- // TODO: auto-maximize on FS, auto-resize on maximize
- // setFullscreen(true);
- maximize();
- onResize(null);
+ table = new TTable(this, 0, 0, getWidth() - 2, getHeight() - 2,
+ new TAction() {
+ @Override
+ public void DO() {
+ onAction(table.getSelectedLine(),
+ table.getSelectedColumn());
+ }
+ }, null);
}
/**
table.getNumberOfColumns() - 1));
}
- public void addKeyBinding(TKeypress key, TAction action) {
- keyBindings.put(key, action);
- }
-
/**
* Return the number of items in this {@link MainContent}, or -1 if this
* {@link MainContent} is not countable.
return table.getNumberOfLines();
}
- /**
- * Close the window.
- */
- public void close() {
- app.closeWindow(this);
- }
-
/**
* An item has been selected.
*
@Override
public void onResize(TResizeEvent resize) {
super.onResize(resize);
- table.setWidth(getWidth());
- table.setHeight(getHeight());
- table.reflow();
- }
-
- @Override
- public void onKeypress(TKeypressEvent keypress) {
- if (keyBindings.containsKey(keypress.getKey())) {
- keyBindings.get(keypress.getKey()).DO();
- } else {
- super.onKeypress(keypress);
+ // Will be NULL at creation time in super()
+ if (table != null) {
+ table.setWidth(getWidth() - 2);
+ table.setHeight(getHeight() - 2);
+ table.reflow();
}
}
}
package be.nikiroo.jvcard.tui.windows;
-import java.util.HashMap;
-import java.util.Map;
-
import jexer.TAction;
import jexer.TApplication;
import jexer.TKeypress;
import jexer.TLabel;
import jexer.TWindow;
-import jexer.event.TKeypressEvent;
import be.nikiroo.jvcard.Contact;
-public class TuiContactWindow extends TWindow {
- private Map<TKeypress, TAction> keyBindings;
-
+public class TuiContactWindow extends TuiBasicWindow {
public TuiContactWindow(final TApplication app, final Contact contact) {
- super(app, "Contact view", 40, 20);
+ super(app, "Contact view");
- keyBindings = new HashMap<TKeypress, TAction>();
-
- keyBindings.put(TKeypress.kbQ, new TAction() {
+ addKeyBinding(TKeypress.kbQ, new TAction() {
@Override
public void DO() {
app.closeWindow(TuiContactWindow.this);
}
});
- keyBindings.put(TKeypress.kbR, new TAction() {
+ addKeyBinding(TKeypress.kbR, new TAction() {
@Override
public void DO() {
@SuppressWarnings("unused")
@SuppressWarnings("unused")
TLabel l = new TLabel(this, "'r' to see raw view", 0, 0);
-
- // TODO: fullscreen selection?
-
- // TODO: auto-maximize on FS, auto-resize on maximize
- // setFullscreen(true);
- maximize();
- onResize(null);
- }
-
- @Override
- public void onKeypress(TKeypressEvent keypress) {
- if (keyBindings.containsKey(keypress.getKey())) {
- keyBindings.get(keypress.getKey()).DO();
- } else {
- super.onKeypress(keypress);
- }
}
}