radio buttons
[fanfix.git] / demos / Demo1.java
index 5d5485a83fe4fb529bc751bcecb23cb30d2cb777..f8e8b63dac090e7a4ae4eb20a05f833339cc0473 100644 (file)
 import jexer.*;
 import jexer.menu.*;
 
+class DemoCheckboxWindow extends TWindow {
+
+    /**
+     * Constructor
+     */
+    DemoCheckboxWindow(TApplication parent) {
+        this(parent, CENTERED | RESIZABLE);
+    }
+
+    /**
+     * Constructor
+     */
+    DemoCheckboxWindow(TApplication parent, int flags) {
+        // Construct a demo window.  X and Y don't matter because it
+        // will be centered on screen.
+        super(parent, "Radiobuttons and Checkboxes", 0, 0, 60, 15, flags);
+
+        int row = 1;
+
+        // Add some widgets
+        addLabel("Check box example 1", 1, row);
+        addCheckbox(35, row++, "Checkbox 1", false);
+        addLabel("Check box example 2", 1, row);
+        addCheckbox(35, row++, "Checkbox 2", true);
+        row += 2;
+
+        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", (getWidth() - 14) / 2, getHeight() - 4,
+            new TAction() {
+                public void DO() {
+                    DemoCheckboxWindow.this.getApplication().closeWindow(DemoCheckboxWindow.this);
+                }
+            }
+        );
+    }
+
+}
+
+
 class DemoMsgBoxWindow extends TWindow {
     /*
     private void openYNCMessageBox() {
-       application.messageBox("Yes/No/Cancel MessageBox",
-           q"EOS
+        application.messageBox("Yes/No/Cancel MessageBox",
+            q"EOS
 This is an example of a Yes/No/Cancel MessageBox.
 
 Note that the MessageBox text can span multiple
@@ -47,12 +90,12 @@ lines.
 The default result (if someone hits the top-left
 close button) is CANCEL.
 EOS",
-       TMessageBox.Type.YESNOCANCEL);
+        TMessageBox.Type.YESNOCANCEL);
     }
 
     private void openYNMessageBox() {
-       application.messageBox("Yes/No MessageBox",
-           q"EOS
+        application.messageBox("Yes/No MessageBox",
+            q"EOS
 This is an example of a Yes/No MessageBox.
 
 Note that the MessageBox text can span multiple
@@ -61,12 +104,12 @@ lines.
 The default result (if someone hits the top-left
 close button) is NO.
 EOS",
-       TMessageBox.Type.YESNO);
+        TMessageBox.Type.YESNO);
     }
 
     private void openOKCMessageBox() {
-       application.messageBox("OK/Cancel MessageBox",
-           q"EOS
+        application.messageBox("OK/Cancel MessageBox",
+            q"EOS
 This is an example of a OK/Cancel MessageBox.
 
 Note that the MessageBox text can span multiple
@@ -75,12 +118,12 @@ lines.
 The default result (if someone hits the top-left
 close button) is CANCEL.
 EOS",
-       TMessageBox.Type.OKCANCEL);
+        TMessageBox.Type.OKCANCEL);
     }
 
     private void openOKMessageBox() {
-       application.messageBox("OK MessageBox",
-           q"EOS
+        application.messageBox("OK MessageBox",
+            q"EOS
 This is an example of a OK MessageBox.  This is the
 default MessageBox.
 
@@ -90,7 +133,7 @@ lines.
 The default result (if someone hits the top-left
 close button) is OK.
 EOS",
-       TMessageBox.Type.OK);
+        TMessageBox.Type.OK);
     }
 
      */
@@ -99,65 +142,68 @@ EOS",
      * Constructor.
      */
     DemoMsgBoxWindow(final TApplication parent) {
-       this(parent, TWindow.CENTERED | TWindow.RESIZABLE);
+        this(parent, TWindow.CENTERED | TWindow.RESIZABLE);
     }
 
     /**
      * Constructor.
      */
     DemoMsgBoxWindow(final TApplication parent, final int flags) {
-       // Construct a demo window.  X and Y don't matter because it
-       // will be centered on screen.
-       super(parent, "Message Boxes", 0, 0, 60, 15, flags);
+        // Construct a demo window.  X and Y don't matter because it
+        // will be centered on screen.
+        super(parent, "Message Boxes", 0, 0, 60, 15, flags);
         /*
-       uint row = 1;
-
-       // Add some widgets
-       addLabel("Default OK message box", 1, row);
-       addButton("Open O&K MB", 35, row, &openOKMessageBox);
-       row += 2;
-
-       addLabel("OK/Cancel message box", 1, row);
-       addButton("O&pen OKC MB", 35, row, &openOKCMessageBox);
-       row += 2;
-
-       addLabel("Yes/No message box", 1, row);
-       addButton("Open &YN MB", 35, row, &openYNMessageBox);
-       row += 2;
-
-       addLabel("Yes/No/Cancel message box", 1, row);
-       addButton("Ope&n YNC MB", 35, row, &openYNCMessageBox);
-       row += 2;
-
-       addLabel("Input box", 1, row);
-       addButton("Open &input box", 35, row,
-           {
-               application.inputBox("Input Box",
-           q"EOS
+        uint row = 1;
+
+        // Add some widgets
+        addLabel("Default OK message box", 1, row);
+        addButton("Open O&K MB", 35, row, &openOKMessageBox);
+        row += 2;
+
+        addLabel("OK/Cancel message box", 1, row);
+        addButton("O&pen OKC MB", 35, row, &openOKCMessageBox);
+        row += 2;
+
+        addLabel("Yes/No message box", 1, row);
+        addButton("Open &YN MB", 35, row, &openYNMessageBox);
+        row += 2;
+
+        addLabel("Yes/No/Cancel message box", 1, row);
+        addButton("Ope&n YNC MB", 35, row, &openYNCMessageBox);
+        row += 2;
+
+        addLabel("Input box", 1, row);
+        addButton("Open &input box", 35, row,
+            {
+                application.inputBox("Input Box",
+            q"EOS
 This is an example of an InputBox.
 
 Note that the InputBox text can span multiple
 lines.
 EOS",
-                   "some input text");
-           }
-       );
-
-       addButton("&Close Window", (width - 14) / 2, height - 4,
-           {
-               application.closeWindow(this);
-           }
-       );
+                    "some input text");
+            }
+        );
+
+        addButton("&Close Window", (width - 14) / 2, height - 4,
+            {
+                application.closeWindow(this);
+            }
+        );
          */
     }
 }
 
 
 class DemoMainWindow extends TWindow {
-    /*
     // Timer that increments a number
     private TTimer timer;
 
+    // Timer label is updated with timerrr 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.
@@ -173,19 +219,17 @@ class DemoMainWindow extends TWindow {
     private void modalWindowClose() {
         application.closeWindow(modalWindow);
     }
+     */
 
-    /// This is an example of having a button call a function.
-    private void openCheckboxWindow() {
-        new DemoCheckboxWindow(application);
-    }
-
-    /// 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.
@@ -194,6 +238,9 @@ class DemoMainWindow extends TWindow {
         this(parent, CENTERED | RESIZABLE);
     }
 
+    int timerI = 0;
+    TProgressBar progressBar;
+
     /**
      * Constructor.
      */
@@ -217,30 +264,40 @@ class DemoMainWindow extends TWindow {
         }
         row += 2;
 
-        /*
         addLabel("Open me as modal", 1, row);
         addButton("W&indow", 35, row,
-            {
-                new DemoMainWindow(application, Flag.MODAL);
+            new TAction() {
+                public void DO() {
+                    new DemoMainWindow(getApplication(), MODAL);
+                }
             }
         );
 
         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) {
+        if (!isModal()) {
             addLabel("Radio buttons and checkboxes", 1, row);
-            addButton("&Checkboxes", 35, row, &openCheckboxWindow);
+            addButton("&Checkboxes", 35, row,
+                new TAction() {
+                    public void DO() {
+                        new DemoCheckboxWindow(getApplication());
+                    }
+                }
+            );
         }
         row += 2;
 
-        if (!isModal) {
+        /*
+        if (!isModal()) {
             addLabel("Editor window", 1, row);
             addButton("Edito&r", 35, row,
                 {
@@ -250,7 +307,7 @@ class DemoMainWindow extends TWindow {
         }
         row += 2;
 
-        if (!isModal) {
+        if (!isModal()) {
             addLabel("Text areas", 1, row);
             addButton("&Text", 35, row,
                 {
@@ -260,7 +317,7 @@ class DemoMainWindow extends TWindow {
         }
         row += 2;
 
-        if (!isModal) {
+        if (!isModal()) {
             addLabel("Tree views", 1, row);
             addButton("Tree&View", 35, row,
                 {
@@ -270,35 +327,34 @@ class DemoMainWindow extends TWindow {
         }
         row += 2;
 
-        version(Posix) {
-            if (!isModal) {
-                addLabel("Terminal", 1, row);
-                addButton("Termi&nal", 35, row,
-                    {
-                        application.openTerminal(0, 0);
-                    }
-                );
-            }
-            row += 2;
+        if (!isModal()) {
+            addLabel("Terminal", 1, row);
+            addButton("Termi&nal", 35, row,
+                {
+                    application.openTerminal(0, 0);
+                }
+            );
         }
+        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);
-         */
+            }
+        );
     }
 }