JAL-2089 patch broken merge to master for Release 2.10.0b1
[jalview.git] / src / jalview / util / Platform.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.util;
22
23 import java.awt.Toolkit;
24 import java.awt.event.MouseEvent;
25
26 /**
27  * System platform information used by Applet and Application
28  * 
29  * @author Jim Procter
30  */
31 public class Platform
32 {
33   /**
34    * sorry folks - Macs really are different
35    * 
36    * @return true if we do things in a special way.
37    */
38   public static boolean isAMac()
39   {
40     return java.lang.System.getProperty("os.name").indexOf("Mac") > -1;
41
42   }
43
44   public static boolean isHeadless()
45   {
46     String hdls = java.lang.System.getProperty("java.awt.headless");
47
48     return hdls != null && hdls.equals("true");
49   }
50
51   /**
52    * 
53    * @return nominal maximum command line length for this platform
54    */
55   public static int getMaxCommandLineLength()
56   {
57     // TODO: determine nominal limits for most platforms.
58     return 2046; // this is the max length for a windows NT system.
59   }
60
61   /**
62    * escape a string according to the local platform's escape character
63    * 
64    * @param file
65    * @return escaped file
66    */
67   public static String escapeString(String file)
68   {
69     StringBuffer f = new StringBuffer();
70     int p = 0, lastp = 0;
71     while ((p = file.indexOf('\\', lastp)) > -1)
72     {
73       f.append(file.subSequence(lastp, p));
74       f.append("\\\\");
75       lastp = p + 1;
76     }
77     f.append(file.substring(lastp));
78     return f.toString();
79   }
80
81   /**
82    * Answers true if the mouse event has Meta-down (Command key on Mac) or
83    * Ctrl-down (on other o/s). Note this answers _false_ if the Ctrl key is
84    * pressed instead of the Meta/Cmd key on Mac. To test for Ctrl-click on Mac,
85    * you can use e.isPopupTrigger().
86    * 
87    * @param e
88    * @return
89    */
90   public static boolean isControlDown(MouseEvent e)
91   {
92     if (isAMac())
93     {
94       return (Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() & e
95               .getModifiers()) != 0;
96       // could we use e.isMetaDown() here?
97     }
98     return e.isControlDown();
99   }
100 }