reflowable text box
[fanfix.git] / demos / Demo1.java
index 7735b055b80062cdb5d7a79c98b376315029c271..a179b0746eed115b90c9b79176982dcc259ba574 100644 (file)
  */
 
 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
@@ -197,10 +255,11 @@ EOS",
 
 
 class DemoMainWindow extends TWindow {
-    // Timer that increments a number
+
+    // Timer that increments a number.
     private TTimer timer;
 
-    // Timer label is updated with timerrr ticks
+    // Timer label is updated with timer ticks.
     TLabel timerLabel;
 
     /*
@@ -304,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,
@@ -360,6 +423,7 @@ class DemoMainWindow extends TWindow {
  * The demo application itself.
  */
 class DemoApplication extends TApplication {
+
     /**
      * Public constructor
      */
@@ -405,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();