Add 'src/jexer/' from commit 'cf01c92f5809a0732409e280fb0f32f27393618d'
[fanfix.git] / src / jexer / TTerminalWindow.java
index 34e7dc411d298af3612af465b641db1e95547e83..e96c50c9921d99603da342e80802c27d0da02e86 100644 (file)
@@ -153,6 +153,9 @@ public class TTerminalWindow extends TScrollableWindow {
         super(application, i18n.getString("windowTitle"), x, y,
             80 + 2, 24 + 2, flags);
 
+        // Require at least one line for the display.
+        setMinimumWindowHeight(3);
+
         this.closeOnExit = closeOnExit;
         vScroller = new TVScroller(this, getWidth() - 2, 0, getHeight() - 2);
 
@@ -202,6 +205,9 @@ public class TTerminalWindow extends TScrollableWindow {
         super(application, i18n.getString("windowTitle"), x, y,
             80 + 2, 24 + 2, flags);
 
+        // Require at least one line for the display.
+        setMinimumWindowHeight(3);
+
         this.closeOnExit = closeOnExit;
         vScroller = new TVScroller(this, getWidth() - 2, 0, getHeight() - 2);
 
@@ -228,7 +234,9 @@ public class TTerminalWindow extends TScrollableWindow {
      */
     @Override
     public void draw() {
-        setTitle(terminal.getTitle());
+        if (terminal != null) {
+            setTitle(terminal.getTitle());
+        }
         reflowData();
         super.draw();
     }
@@ -241,8 +249,10 @@ public class TTerminalWindow extends TScrollableWindow {
     @Override
     public void onResize(final TResizeEvent resize) {
         if (resize.getType() == TResizeEvent.Type.WIDGET) {
-            terminal.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET,
-                    getWidth() - 2, getHeight() - 2));
+            if (terminal != null) {
+                terminal.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET,
+                        getWidth() - 2, getHeight() - 2));
+            }
 
             // Resize the scroll bars
             reflowData();
@@ -257,11 +267,13 @@ public class TTerminalWindow extends TScrollableWindow {
     @Override
     public void reflowData() {
         // Vertical scrollbar
-        terminal.reflowData();
-        setTopValue(terminal.getTopValue());
-        setBottomValue(terminal.getBottomValue());
-        setVerticalBigChange(terminal.getVerticalBigChange());
-        setVerticalValue(terminal.getVerticalValue());
+        if (terminal != null) {
+            terminal.reflowData();
+            setTopValue(terminal.getTopValue());
+            setBottomValue(terminal.getBottomValue());
+            setVerticalBigChange(terminal.getVerticalBigChange());
+            setVerticalValue(terminal.getVerticalValue());
+        }
     }
 
     /**
@@ -271,7 +283,7 @@ public class TTerminalWindow extends TScrollableWindow {
      */
     @Override
     public void onKeypress(final TKeypressEvent keypress) {
-        if (terminal.isReading()) {
+        if ((terminal != null) && (terminal.isReading())) {
             terminal.onKeypress(keypress);
         } else {
             super.onKeypress(keypress);
@@ -308,6 +320,13 @@ public class TTerminalWindow extends TScrollableWindow {
         }
 
         super.onMouseUp(mouse);
+
+        if (mouse.isMouse1() && mouseOnVerticalScroller(mouse)) {
+            // Clicked on vertical scrollbar
+            if (terminal != null) {
+                terminal.setVerticalValue(getVerticalValue());
+            }
+        }
     }
 
     /**
@@ -324,6 +343,13 @@ public class TTerminalWindow extends TScrollableWindow {
         }
 
         super.onMouseMotion(mouse);
+
+        if (mouse.isMouse1() && mouseOnVerticalScroller(mouse)) {
+            // Clicked/dragged on vertical scrollbar
+            if (terminal != null) {
+                terminal.setVerticalValue(getVerticalValue());
+            }
+        }
     }
 
     // ------------------------------------------------------------------------
@@ -339,7 +365,10 @@ public class TTerminalWindow extends TScrollableWindow {
      */
     @Override
     public boolean hasHiddenMouse() {
-        return terminal.hasHiddenMouse();
+        if (terminal != null) {
+            return terminal.hasHiddenMouse();
+        }
+        return false;
     }
 
     /**