+
+ /**
+ * Answers true if the mouse event has Meta-down (Command key on Mac) or
+ * Ctrl-down (on other o/s). Note this answers _false_ if the Ctrl key is
+ * pressed instead of the Meta/Cmd key on Mac. To test for Ctrl-pressed on Mac,
+ * you can use e.isPopupTrigger().
+ *
+ * @param e
+ * @return
+ */
+ public static boolean isControlDown(MouseEvent e)
+ {
+ return isControlDown(e, isMac());
+ }
+
+ /**
+ * Overloaded version of method (to allow unit testing)
+ *
+ * @param e
+ * @param aMac
+ * @return
+ */
+ protected static boolean isControlDown(MouseEvent e, boolean aMac)
+ {
+ if (!aMac) {
+ return e.isControlDown();
+ }
+ // 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?
+ }
+
+ /**
+ * 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)
+ System.err.println("Platform: timer dur\t" + ((t - time)/1000f) + "\t" + ((duration)/1000f) + "\t" + msg);
+ set = 0;
+ break;
+ }
+ }
+
+