001 /*
002 * $Id: OS.java 1705 2007-01-23 18:32:03Z l2fprod $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021 package org.jdesktop.swingx.util;
022
023 import java.awt.Toolkit;
024
025 import javax.swing.UIManager;
026
027 /**
028 * Provides methods related to the runtime environment.
029 */
030 public class OS {
031
032 private static final boolean osIsMacOsX;
033 private static final boolean osIsWindows;
034 private static final boolean osIsWindowsXP;
035 private static final boolean osIsWindows2003;
036 private static final boolean osIsWindowsVista;
037 private static final boolean osIsLinux;
038
039 static {
040 String os = System.getProperty("os.name").toLowerCase();
041
042 osIsMacOsX = "mac os x".equals(os);
043 osIsWindows = os != null && os.indexOf("windows") != -1;
044 osIsWindowsXP = "windows xp".equals(os);
045 osIsWindows2003 = "windows 2003".equals(os);
046 osIsWindowsVista = "windows vista".equals(os);
047 osIsLinux = os != null && os.indexOf("linux") != -1;
048 }
049
050 /**
051 * @return true if this VM is running on Mac OS X
052 */
053 public static boolean isMacOSX() {
054 return osIsMacOsX;
055 }
056
057 /**
058 * @return true if this VM is running on Windows
059 */
060 public static boolean isWindows() {
061 return osIsWindows;
062 }
063
064 /**
065 * @return true if this VM is running on Windows XP
066 */
067 public static boolean isWindowsXP() {
068 return osIsWindowsXP;
069 }
070
071 /**
072 * @return true if this VM is running on Windows 2003
073 */
074 public static boolean isWindows2003() {
075 return osIsWindows2003;
076 }
077
078 /**
079 * @return true if this VM is running on Windows Vista
080 */
081 public static boolean isWindowsVista() {
082 return osIsWindowsVista;
083 }
084
085 /**
086 * @return true if this VM is running on a Linux distribution
087 */
088 public static boolean isLinux() {
089 return osIsLinux;
090 }
091
092 /**
093 * @return true if the VM is running Windows and the Java
094 * application is rendered using XP Visual Styles.
095 */
096 public static boolean isUsingWindowsVisualStyles() {
097 if (!isWindows()) {
098 return false;
099 }
100
101 boolean xpthemeActive = Boolean.TRUE.equals(Toolkit.getDefaultToolkit()
102 .getDesktopProperty("win.xpstyle.themeActive"));
103 if (!xpthemeActive) {
104 return false;
105 } else {
106 try {
107 return System.getProperty("swing.noxp") == null;
108 } catch (RuntimeException e) {
109 return true;
110 }
111 }
112 }
113
114 /**
115 * Returns the name of the current Windows visual style.
116 * <ul>
117 * <li>it looks for a property name "win.xpstyle.name" in UIManager and if not found
118 * <li>it queries the win.xpstyle.colorName desktop property ({@link Toolkit#getDesktopProperty(java.lang.String)})
119 * </ul>
120 *
121 * @return the name of the current Windows visual style if any.
122 */
123 public static String getWindowsVisualStyle() {
124 String style = UIManager.getString("win.xpstyle.name");
125 if (style == null) {
126 // guess the name of the current XPStyle
127 // (win.xpstyle.colorName property found in awt_DesktopProperties.cpp in
128 // JDK source)
129 style = (String)Toolkit.getDefaultToolkit().getDesktopProperty(
130 "win.xpstyle.colorName");
131 }
132 return style;
133 }
134
135 }