+ /**
+ * Translate the mouse event to a VT100, VT220, or XTERM sequence and
+ * send to the remote side.
+ *
+ * @param mouse mouse event received from the local user
+ */
+ public void mouse(final TMouseEvent mouse) {
+
+ /*
+ System.err.printf("mouse(): protocol %s encoding %s mouse %s\n",
+ mouseProtocol, mouseEncoding, mouse);
+ */
+
+ if (mouseEncoding != MouseEncoding.UTF8) {
+ // We will support X10 but only for (160,94) and smaller.
+ if ((mouse.getX() >= 160) || (mouse.getY() >= 94)) {
+ return;
+ }
+ }
+
+ switch (mouseProtocol) {
+
+ case OFF:
+ // Do nothing
+ return;
+
+ case X10:
+ // Only report button presses
+ if (mouse.getType() != TMouseEvent.Type.MOUSE_DOWN) {
+ return;
+ }
+ break;
+
+ case NORMAL:
+ // Only report button presses and releases
+ if ((mouse.getType() != TMouseEvent.Type.MOUSE_DOWN)
+ && (mouse.getType() != TMouseEvent.Type.MOUSE_UP)
+ ) {
+ return;
+ }
+ break;
+
+ case BUTTONEVENT:
+ /*
+ * Only report button presses, button releases, and motions that
+ * have a button down (i.e. drag-and-drop).
+ */
+ if (mouse.getType() == TMouseEvent.Type.MOUSE_MOTION) {
+ if (!mouse.isMouse1()
+ && !mouse.isMouse2()
+ && !mouse.isMouse3()
+ && !mouse.isMouseWheelUp()
+ && !mouse.isMouseWheelDown()
+ ) {
+ return;
+ }
+ }
+ break;
+
+ case ANYEVENT:
+ // Report everything
+ break;
+ }
+
+ // Now encode the event
+ StringBuilder sb = new StringBuilder(6);
+ sb.append((char) 0x1B);
+ sb.append('[');
+ sb.append('M');
+ if (mouse.getType() == TMouseEvent.Type.MOUSE_UP) {
+ sb.append((char) (0x03 + 32));
+ } else if (mouse.isMouse1()) {
+ sb.append((char) (0x00 + 32));
+ } else if (mouse.isMouse2()) {
+ sb.append((char) (0x01 + 32));
+ } else if (mouse.isMouse3()) {
+ sb.append((char) (0x02 + 32));
+ } else if (mouse.isMouseWheelUp()) {
+ sb.append((char) (0x04 + 64));
+ } else if (mouse.isMouseWheelDown()) {
+ sb.append((char) (0x05 + 64));
+ } else {
+ sb.append((char) (0x03 + 32));
+ }
+
+ sb.append((char) (mouse.getX() + 33));
+ sb.append((char) (mouse.getY() + 33));
+
+ // System.err.printf("Would write: \'%s\'\n", sb.toString());
+ writeRemote(sb.toString());
+ }
+