X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=demos%2FDemo1.java;h=a179b0746eed115b90c9b79176982dcc259ba574;hb=cc99cba8bdfb594d4606949f1763898a420e7f34;hp=44333a42b4be7f3a30f93f38c995bf31f5a395c1;hpb=7272e49f35db74caa16eead38aa39a80bb9fc641;p=fanfix.git diff --git a/demos/Demo1.java b/demos/Demo1.java index 44333a4..a179b07 100644 --- a/demos/Demo1.java +++ b/demos/Demo1.java @@ -32,19 +32,77 @@ */ import jexer.*; +import jexer.event.*; import jexer.menu.*; +class DemoTextWindow extends TWindow { + + /** + * Hang onto my TText so I can resize it with the window. + */ + private TText textField; + + /** + * Public constructor. + */ + public DemoTextWindow(TApplication parent) { + super(parent, "Text Areas", 0, 0, 44, 20, RESIZABLE); + + textField = addText( +"This is an example of a reflowable text field. Some example text follows.\n" + +"\n" + +"This library implements a text-based windowing system loosely\n" + +"reminiscient of Borland's [Turbo\n" + +"Vision](http://en.wikipedia.org/wiki/Turbo_Vision) library. For those\n" + +"wishing to use the actual C++ Turbo Vision library, see [Sergio\n" + +"Sigala's updated version](http://tvision.sourceforge.net/) that runs\n" + +"on many more platforms.\n" + +"\n" + +"Currently the only console platform supported is Posix (tested on\n" + +"Linux). Input/output is handled through terminal escape sequences\n" + +"generated by the library itself: ncurses is not required or linked to. \n" + +"xterm mouse tracking using UTF8 coordinates is supported.\n" + +"\n" + +"This library is licensed LGPL (\"GNU Lesser General Public License\")\n" + +"version 3 or greater. See the file COPYING for the full license text,\n" + +"which includes both the GPL v3 and the LGPL supplemental terms.\n" + +"\n", + 1, 1, 40, 16); + } + + /** + * Handle window/screen resize events. + * + * @param event resize event + */ + @Override + public void onResize(final TResizeEvent event) { + if (event.getType() == TResizeEvent.Type.WIDGET) { + // Resize the text field + textField.setWidth(event.getWidth() - 4); + textField.setHeight(event.getHeight() - 4); + textField.reflow(); + return; + } + + // Pass to children instead + for (TWidget widget: getChildren()) { + widget.onResize(event); + } + } +} + class DemoCheckboxWindow extends TWindow { /** - * Constructor + * Constructor. */ DemoCheckboxWindow(TApplication parent) { this(parent, CENTERED | RESIZABLE); } /** - * Constructor + * Constructor. */ DemoCheckboxWindow(TApplication parent, int flags) { // Construct a demo window. X and Y don't matter because it @@ -60,19 +118,18 @@ class DemoCheckboxWindow extends TWindow { addCheckbox(35, row++, "Checkbox 2", true); row += 2; - /* - auto group = addRadioGroup(1, row, "Group 1"); + TRadioGroup group = addRadioGroup(1, row, "Group 1"); group.addRadioButton("Radio option 1"); group.addRadioButton("Radio option 2"); group.addRadioButton("Radio option 3"); - addButton("&Close Window", (width - 14) / 2, height - 4, - { - application.closeWindow(this); + addButton("&Close Window", (getWidth() - 14) / 2, getHeight() - 4, + new TAction() { + public void DO() { + DemoCheckboxWindow.this.getApplication().closeWindow(DemoCheckboxWindow.this); + } } - ); - */ } } @@ -198,10 +255,14 @@ EOS", class DemoMainWindow extends TWindow { - /* - // Timer that increments a number + + // Timer that increments a number. private TTimer timer; + // Timer label is updated with timer ticks. + TLabel timerLabel; + + /* // The modal window is a more low-level example of controlling a window // "from the outside". Most windows will probably subclass TWindow and // do this kind of logic on their own. @@ -217,14 +278,17 @@ class DemoMainWindow extends TWindow { private void modalWindowClose() { application.closeWindow(modalWindow); } + */ - /// We need to override onClose so that the timer will no longer be - /// called after we close the window. TTimers currently are completely - /// unaware of the rest of the UI classes. - override public void onClose() { - application.removeTimer(timer); - } + /** + * We need to override onClose so that the timer will no longer be called + * after we close the window. TTimers currently are completely unaware + * of the rest of the UI classes. */ + @Override + public void onClose() { + getApplication().removeTimer(timer); + } /** * Construct demo window. It will be centered on screen. @@ -233,6 +297,9 @@ class DemoMainWindow extends TWindow { this(parent, CENTERED | RESIZABLE); } + int timerI = 0; + TProgressBar progressBar; + /** * Constructor. */ @@ -267,21 +334,19 @@ class DemoMainWindow extends TWindow { row += 2; - /* addLabel("Variable-width text field:", 1, row); addField(35, row++, 15, false, "Field text"); addLabel("Fixed-width text field:", 1, row); addField(35, row, 15, true); row += 2; - */ if (!isModal()) { addLabel("Radio buttons and checkboxes", 1, row); addButton("&Checkboxes", 35, row, new TAction() { public void DO() { - new DemoCheckboxWindow(getApplication(), MODAL); + new DemoCheckboxWindow(getApplication()); } } ); @@ -298,17 +363,21 @@ class DemoMainWindow extends TWindow { ); } row += 2; + */ if (!isModal()) { addLabel("Text areas", 1, row); addButton("&Text", 35, row, - { - new DemoTextWindow(application); + new TAction() { + public void DO() { + new DemoTextWindow(getApplication()); + } } ); } row += 2; + /* if (!isModal()) { addLabel("Tree views", 1, row); addButton("Tree&View", 35, row, @@ -328,24 +397,25 @@ class DemoMainWindow extends TWindow { ); } row += 2; + */ - TProgressBar bar = addProgressBar(1, row, 22); + progressBar = addProgressBar(1, row, 22, 0); row++; - TLabel timerLabel = addLabel("Timer", 1, row); - timer = parent.addTimer(100, - { - static int i = 0; - auto writer = appender!dstring(); - formattedWrite(writer, "Timer: %d", i); - timerLabel.text = writer.data; - timerLabel.width = cast(uint)timerLabel.text.length; - if (i < 100) { - i++; + timerLabel = addLabel("Timer", 1, row); + timer = getApplication().addTimer(100, true, + new TAction() { + + public void DO() { + timerLabel.setText(String.format("Timer: %d", timerI)); + timerLabel.setWidth(timerLabel.getText().length()); + if (timerI < 100) { + timerI++; + } + progressBar.setValue(timerI); + DemoMainWindow.this.setRepaint(); } - bar.value = i; - parent.repaint = true; - }, true); - */ + } + ); } } @@ -353,6 +423,7 @@ class DemoMainWindow extends TWindow { * The demo application itself. */ class DemoApplication extends TApplication { + /** * Public constructor */ @@ -398,9 +469,9 @@ public class Demo1 { /** * Main entry point. * - * @param args Command line arguments + * @param args Command line arguments */ - public static void main(String [] args) { + public static void main(final String [] args) { try { DemoApplication app = new DemoApplication(); app.run();