draggable window
[fanfix.git] / demos / Demo1.java
index 62fce24c3022bb46560a067d4f56bba97319cd8d..29d03455577fb7204ac20133d3e94cb92159a421 100644 (file)
  * 02110-1301 USA
  */
 
-import jexer.bits.*;
-import jexer.TApplication;
-import jexer.session.TTYSessionInfo;
+import jexer.*;
+
+class DemoMainWindow extends TWindow {
+    /*
+    // Timer that increments a number
+    private TTimer timer;
+
+    // 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.
+    private TWindow modalWindow;
+    private void openModalWindow() {
+       modalWindow = application.addWindow("Demo Modal Window", 0, 0,
+           58, 15, TWindow.Flag.MODAL);
+       modalWindow.addLabel("This is an example of a very braindead modal window.", 1, 1);
+       modalWindow.addLabel("Modal windows are centered by default.", 1, 2);
+       modalWindow.addButton("&Close", (modalWindow.width - 8)/2,
+           modalWindow.height - 4, &modalWindowClose);
+    }
+    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);
+    }
+     */
+
+    /// Constructor
+    public DemoMainWindow(TApplication parent) {
+       this(parent, CENTERED | RESIZABLE);
+    }
+
+    /// Constructor
+    public DemoMainWindow(TApplication parent, int flags) {
+       // Construct a demo window.  X and Y don't matter because it will be
+       // centered on screen.
+       super(parent, "Demo Window", 0, 0, 60, 23, flags);
+
+       int row = 1;
+
+        /*
+       // Add some widgets
+       if (!isModal) {
+           addLabel("Message Boxes", 1, row);
+           addButton("&MessageBoxes", 35, row,
+               {
+                   new DemoMsgBoxWindow(application);
+               }
+           );
+       }
+       row += 2;
+
+       addLabel("Open me as modal", 1, row);
+       addButton("W&indow", 35, row,
+           {
+               new DemoMainWindow(application, Flag.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) {
+           addLabel("Radio buttons and checkboxes", 1, row);
+           addButton("&Checkboxes", 35, row, &openCheckboxWindow);
+       }
+       row += 2;
+
+       if (!isModal) {
+           addLabel("Editor window", 1, row);
+           addButton("Edito&r", 35, row,
+               {
+                   new TEditor(application, 0, 0, 60, 15);
+               }
+           );
+       }
+       row += 2;
+
+       if (!isModal) {
+           addLabel("Text areas", 1, row);
+           addButton("&Text", 35, row,
+               {
+                   new DemoTextWindow(application);
+               }
+           );
+       }
+       row += 2;
+
+       if (!isModal) {
+           addLabel("Tree views", 1, row);
+           addButton("Tree&View", 35, row,
+               {
+                   new DemoTreeViewWindow(application);
+               }
+           );
+       }
+       row += 2;
+
+       version(Posix) {
+           if (!isModal) {
+               addLabel("Terminal", 1, row);
+               addButton("Termi&nal", 35, row,
+                   {
+                       application.openTerminal(0, 0);
+                   }
+               );
+           }
+           row += 2;
+       }
+
+       TProgressBar bar = addProgressBar(1, row, 22);
+       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++;
+               }
+               bar.value = i;
+               parent.repaint = true;
+           }, true);
+         */
+    }
+}
 
 /**
  * The demo application itself.
@@ -44,16 +185,7 @@ class DemoApplication extends TApplication {
      */
     public DemoApplication() throws Exception {
        super(null, null);
-       /*
-       try {
-           ColorTheme theme = new ColorTheme();
-           TTYSessionInfo tty = new TTYSessionInfo();
-           System.out.println("width: " + tty.getWindowWidth());
-           System.out.println("height: " + tty.getWindowHeight());
-       } catch (Exception e) {
-           e.printStackTrace();
-       }
-        */
+       new DemoMainWindow(this);
     }
 }