+ return e.isControlDown();
+
+ // Jalview 2.11 code below: above is as amended for JalviewJS
+ // /*
+ // * answer false for right mouse button
+ // */
+ // if (e.isPopupTrigger())
+ // {
+ // return false;
+ // }
+ // return
+ // (jalview.util.ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx() //
+ // .getMenuShortcutKeyMaskEx()
+ // & jalview.util.ShortcutKeyMaskExWrapper
+ // .getModifiersEx(e)) != 0; // getModifiers()) != 0;
+ }
+ // answer false for right mouse button
+ // shortcut key will be META for a Mac
+ return !e.isPopupTrigger()
+ && (Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
+ & e.getModifiers()) != 0;
+ // could we use e.isMetaDown() here?
+ }
+
+ // BH: I don't know about that previous method. Here is what SwingJS uses.
+ // Notice the distinction in mouse events. (BUTTON3_MASK == META)
+ //
+ // private static boolean isPopupTrigger(int id, int mods, boolean isWin) {
+ // boolean rt = ((mods & InputEvent.BUTTON3_MASK) != 0);
+ // if (isWin) {
+ // if (id != MouseEvent.MOUSE_RELEASED)
+ // return false;
+ ////
+ //// // Oddly, Windows returns InputEvent.META_DOWN_MASK on release, though
+ //// // BUTTON3_DOWN_MASK for pressed. So here we just accept both.
+ ////
+ //// actually, we can use XXX_MASK, not XXX_DOWN_MASK and avoid this issue,
+ // because
+ //// J2S adds the appropriate extended (0x3FC0) and simple (0x3F) modifiers.
+ ////
+ // return rt;
+ // } else {
+ // // mac, linux, unix
+ // if (id != MouseEvent.MOUSE_PRESSED)
+ // return false;
+ // boolean lt = ((mods & InputEvent.BUTTON1_MASK) != 0);
+ // boolean ctrl = ((mods & InputEvent.CTRL_MASK) != 0);
+ // return rt || (ctrl && lt);
+ // }
+ // }
+ //
+
+ /**
+ * Windows (not Mac, Linux, or Unix) and right button to test for the
+ * right-mouse pressed event in Windows that would have opened a menu or a
+ * Mac.
+ *
+ * @param e
+ * @return
+ */
+ public static boolean isWinRightButton(MouseEvent e)
+ {
+ // was !isAMac(), but that is true also for Linux and Unix and JS,
+
+ return isWin() && SwingUtilities.isRightMouseButton(e);
+ }
+
+ /**
+ * Windows (not Mac, Linux, or Unix) and middle button -- for mouse wheeling
+ * without pressing the button.
+ *
+ * @param e
+ * @return
+ */
+ public static boolean isWinMiddleButton(MouseEvent e)
+ {
+ // was !isAMac(), but that is true also for Linux and Unix and JS
+ return isWin() && SwingUtilities.isMiddleMouseButton(e);
+ }
+
+ public static boolean allowMnemonics()
+ {
+ return !isMac();
+ }
+
+ public final static int TIME_RESET = 0;
+
+ public final static int TIME_MARK = 1;
+
+ public static final int TIME_SET = 2;
+
+ public static final int TIME_GET = 3;
+
+ public static long time, mark, set, duration;
+
+ public static void timeCheck(String msg, int mode)
+ {
+ long t = System.currentTimeMillis();
+ switch (mode)
+ {
+ case TIME_RESET:
+ time = mark = t;
+ if (msg != null)
+ {
+ System.err.println("Platform: timer reset\t\t\t" + msg);
+ }
+ break;
+ case TIME_MARK:
+ if (set > 0)
+ {
+ duration += (t - set);
+ }
+ else
+ {
+ if (time == 0)
+ {
+ time = mark = t;
+ }
+ if (msg != null)
+ {
+ System.err.println("Platform: timer mark\t" + ((t - time) / 1000f)
+ + "\t" + ((t - mark) / 1000f) + "\t" + msg);
+ }
+ mark = t;
+ }
+ break;
+ case TIME_SET:
+ set = t;
+ break;
+ case TIME_GET:
+ if (msg != null)