*/
package jexer;
+import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
desktop.setDimensions(0, 0, resize.getWidth(),
resize.getHeight() - 1);
}
+
+ // Change menu edges if needed.
+ recomputeMenuX();
+
// We are dirty, redraw the screen.
doRepaint();
return;
if (activeWindow != null) {
assert (activeWindow.getZ() == 0);
- activeWindow.onUnfocus();
activeWindow.setActive(false);
activeWindow.setZ(window.getZ());
+
+ // Unset activeWindow now before unfocus, so that a window
+ // lifecycle change inside onUnfocus() doesn't call
+ // switchWindow() and lead to a stack overflow.
+ TWindow oldActiveWindow = activeWindow;
+ activeWindow = null;
+ oldActiveWindow.onUnfocus();
}
activeWindow = window;
activeWindow.setZ(0);
// They selected the menu, go activate it
for (TMenu menu: menus) {
- if ((mouse.getAbsoluteX() >= menu.getX())
- && (mouse.getAbsoluteX() < menu.getX()
+ if ((mouse.getAbsoluteX() >= menu.getTitleX())
+ && (mouse.getAbsoluteX() < menu.getTitleX()
+ menu.getTitle().length() + 2)
) {
menu.setActive(true);
// See if we should switch menus
for (TMenu menu: menus) {
- if ((mouse.getAbsoluteX() >= menu.getX())
- && (mouse.getAbsoluteX() < menu.getX()
+ if ((mouse.getAbsoluteX() >= menu.getTitleX())
+ && (mouse.getAbsoluteX() < menu.getTitleX()
+ menu.getTitle().length() + 2)
) {
menu.setActive(true);
int x = 0;
for (TMenu menu: menus) {
menu.setX(x);
+ menu.setTitleX(x);
x += menu.getTitle().length() + 2;
+
+ // Don't let the menu window exceed the screen width
+ int rightEdge = menu.getX() + menu.getWidth();
+ if (rightEdge > getScreen().getWidth()) {
+ menu.setX(getScreen().getWidth() - menu.getWidth());
+ }
}
}
TWindow window = new TWindow(this, title, 0, 0, width, height);
return window;
}
+
/**
* Convenience function to create a new window and make it active.
* Window will be located at (0, 0).
return window;
}
+ /**
+ * Convenience function to open a file in an editor window and make it
+ * active.
+ *
+ * @param file the file to open
+ * @throws IOException if a java.io operation throws
+ */
+ public final TEditorWindow addEditor(final File file) throws IOException {
+
+ TEditorWindow editor = new TEditorWindow(this, file);
+ return editor;
+ }
+
}