import jexer.bits.GraphicsChars;
import jexer.event.TCommandEvent;
import jexer.event.TKeypressEvent;
+import jexer.event.TMenuEvent;
import jexer.event.TMouseEvent;
import jexer.event.TResizeEvent;
+import jexer.menu.TMenu;
import static jexer.TCommand.*;
import static jexer.TKeypress.*;
*/
private String filename = "";
+ /**
+ * If true, hide the mouse after typing a keystroke.
+ */
+ private boolean hideMouseWhenTyping = true;
+
+ /**
+ * If true, the mouse should not be displayed because a keystroke was
+ * typed.
+ */
+ private boolean typingHidMouse = false;
+
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
public TEditorWindow(final TApplication parent, final String title) {
super(parent, title, 0, 0, parent.getScreen().getWidth(),
- parent.getScreen().getHeight() - 2, RESIZABLE);
+ parent.getDesktopBottom() - parent.getDesktopTop(), RESIZABLE);
editField = addEditor("", 0, 0, getWidth() - 2, getHeight() - 2);
setupAfterEditor();
final String contents) {
super(parent, title, 0, 0, parent.getScreen().getWidth(),
- parent.getScreen().getHeight() - 2, RESIZABLE);
+ parent.getDesktopBottom() - parent.getDesktopTop(), RESIZABLE);
filename = title;
editField = addEditor(contents, 0, 0, getWidth() - 2, getHeight() - 2);
final File file) throws IOException {
super(parent, file.getName(), 0, 0, parent.getScreen().getWidth(),
- parent.getScreen().getHeight() - 2, RESIZABLE);
+ parent.getDesktopBottom() - parent.getDesktopTop(), RESIZABLE);
filename = file.getName();
String contents = readFileData(file);
}
// ------------------------------------------------------------------------
- // TWindow ----------------------------------------------------------------
+ // Event handlers ---------------------------------------------------------
// ------------------------------------------------------------------------
/**
- * Draw the window.
+ * Called by application.switchWindow() when this window gets the
+ * focus, and also by application.addWindow().
*/
- @Override
- public void draw() {
- // Draw as normal.
- super.draw();
-
- // Add the row:col on the bottom row
- CellAttributes borderColor = getBorder();
- String location = String.format(" %d:%d ",
- editField.getEditingRowNumber(),
- editField.getEditingColumnNumber());
- int colon = location.indexOf(':');
- putStringXY(10 - colon, getHeight() - 1, location, borderColor);
+ public void onFocus() {
+ super.onFocus();
+ getApplication().enableMenuItem(TMenu.MID_UNDO);
+ getApplication().enableMenuItem(TMenu.MID_REDO);
+ }
- if (editField.isDirty()) {
- putCharXY(2, getHeight() - 1, GraphicsChars.OCTOSTAR, borderColor);
- }
+ /**
+ * Called by application.switchWindow() when another window gets the
+ * focus.
+ */
+ public void onUnfocus() {
+ super.onUnfocus();
+ getApplication().disableMenuItem(TMenu.MID_UNDO);
+ getApplication().disableMenuItem(TMenu.MID_REDO);
}
/**
// Use TWidget's code to pass the event to the children.
super.onMouseDown(mouse);
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
if (mouseOnEditor(mouse)) {
// The editor might have changed, update the scollbars.
setBottomValue(editField.getMaximumRowNumber());
// Use TWidget's code to pass the event to the children.
super.onMouseUp(mouse);
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
if (mouse.isMouse1() && mouseOnVerticalScroller(mouse)) {
// Clicked on vertical scrollbar
editField.setVisibleRowNumber(getVerticalValue());
}
-
- // TODO: horizontal scrolling
+ if (mouse.isMouse1() && mouseOnHorizontalScroller(mouse)) {
+ // Clicked on horizontal scrollbar
+ editField.setVisibleColumnNumber(getHorizontalValue());
+ setHorizontalValue(editField.getVisibleColumnNumber());
+ }
}
/**
// Use TWidget's code to pass the event to the children.
super.onMouseMotion(mouse);
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
if (mouseOnEditor(mouse) && mouse.isMouse1()) {
// The editor might have changed, update the scollbars.
setBottomValue(editField.getMaximumRowNumber());
// Clicked/dragged on vertical scrollbar
editField.setVisibleRowNumber(getVerticalValue());
}
-
- // TODO: horizontal scrolling
+ if (mouse.isMouse1() && mouseOnHorizontalScroller(mouse)) {
+ // Clicked/dragged on horizontal scrollbar
+ editField.setVisibleColumnNumber(getHorizontalValue());
+ setHorizontalValue(editField.getVisibleColumnNumber());
+ }
}
}
*/
@Override
public void onKeypress(final TKeypressEvent keypress) {
+ if (hideMouseWhenTyping) {
+ typingHidMouse = true;
+ }
+
// Use TWidget's code to pass the event to the children.
super.onKeypress(keypress);
super.onCommand(command);
}
+ /**
+ * Handle posted menu events.
+ *
+ * @param menu menu event
+ */
+ @Override
+ public void onMenu(final TMenuEvent menu) {
+ switch (menu.getId()) {
+ case TMenu.MID_UNDO:
+ editField.undo();
+ break;
+ case TMenu.MID_REDO:
+ editField.redo();
+ break;
+ }
+ }
+
+ // ------------------------------------------------------------------------
+ // TWindow ----------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Draw the window.
+ */
+ @Override
+ public void draw() {
+ // Draw as normal.
+ super.draw();
+
+ // Add the row:col on the bottom row
+ CellAttributes borderColor = getBorder();
+ String location = String.format(" %d:%d ",
+ editField.getEditingRowNumber(),
+ editField.getEditingColumnNumber());
+ int colon = location.indexOf(':');
+ putStringXY(10 - colon, getHeight() - 1, location, borderColor);
+
+ if (editField.isDirty()) {
+ putCharXY(2, getHeight() - 1, GraphicsChars.OCTOSTAR, borderColor);
+ }
+ }
+
+ /**
+ * Returns true if this window does not want the application-wide mouse
+ * cursor drawn over it.
+ *
+ * @return true if this window does not want the application-wide mouse
+ * cursor drawn over it
+ */
+ @Override
+ public boolean hasHiddenMouse() {
+ return (super.hasHiddenMouse() || typingHidMouse);
+ }
+
// ------------------------------------------------------------------------
// TEditorWindow ----------------------------------------------------------
// ------------------------------------------------------------------------
i18n.getString("statusBarOpen"));
statusBar.addShortcutKeypress(kbF10, cmMenu,
i18n.getString("statusBarMenu"));
+
+ // Hide mouse when typing option
+ if (System.getProperty("jexer.TEditor.hideMouseWhenTyping",
+ "true").equals("false")) {
+
+ hideMouseWhenTyping = false;
+ }
}
/**