|
What this is
Other links
The source code/* * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * OperatingSystem.java - OS detection * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2002, 2003 Slava Pestov * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import javax.swing.UIManager; import java.io.File; import java.util.Enumeration; import java.util.Vector; import org.gjt.sp.util.Log; /** * Operating system detection routines. * @author Slava Pestov * @version $Id: OperatingSystem.java,v 1.16 2003/12/25 00:09:42 spestov Exp $ * @since jEdit 4.0pre4 */ public class OperatingSystem { //{{{ getScreenBounds() method /** * Returns the bounds of the default screen. */ public static final Rectangle getScreenBounds() { int screenX = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); int screenY = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); int x, y, w, h; if (isMacOS()) { x = 0; y = 22; w = screenX; h = screenY - y - 4;//shadow size } else if (isWindows()) { x = -4; y = -4; w = screenX - 2*x; h = screenY - 2*y; } else { x = 0; y = 0; w = screenX; h = screenY; } return new Rectangle(x,y,w,h); } //}}} //{{{ getScreenBounds() method /** * Returns the bounds of the (virtual) screen that the window should be in * @param window The bounds of the window to get the screen for */ public static final Rectangle getScreenBounds(Rectangle window) { GraphicsDevice[] gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); Vector intersects = new Vector(); // Get available screens // O(n^3), this is nasty, but since we aren't dealling with // many items it should be fine for (int i=0; i < gd.length; i++) { GraphicsConfiguration gc = gd[i] .getDefaultConfiguration(); // Don't add duplicates if (window.intersects(gc.getBounds())) { for (Enumeration e = intersects.elements(); e.hasMoreElements();) { GraphicsConfiguration gcc = (GraphicsConfiguration)e.nextElement(); if (gcc.getBounds().equals(gc.getBounds())) break; } intersects.add(gc); } } GraphicsConfiguration choice = null; if (intersects.size() > 0) { // Pick screen with largest intersection for (Enumeration e = intersects.elements(); e.hasMoreElements();) { GraphicsConfiguration gcc = (GraphicsConfiguration)e.nextElement(); if (choice == null) choice = gcc; else { Rectangle int1 = choice.getBounds().intersection(window); Rectangle int2 = gcc.getBounds().intersection(window); int area1 = int1.width * int1.height; int area2 = int2.width * int2.height; if (area2 > area1) choice = gcc; } } } else choice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); // Make adjustments for some OS's int screenX = (int)choice.getBounds().x; int screenY = (int)choice.getBounds().y; int screenW = (int)choice.getBounds().width; int screenH = (int)choice.getBounds().height; int x, y, w, h; if (isMacOS()) { x = screenX; y = screenY + 22; w = screenW; h = screenH - y - 4;//shadow size } else if (isWindows()) { x = screenX - 4; y = screenY - 4; w = screenW - 2*x; h = screenH - 2*y; } else { x = screenX; y = screenY; w = screenW; h = screenH; } // Yay, we're finally there return new Rectangle(x,y,w,h); } //}}} //{{{ isDOSDerived() method /** * Returns if we're running Windows 95/98/ME/NT/2000/XP, or OS/2. */ public static final boolean isDOSDerived() { return isWindows() || isOS2(); } //}}} //{{{ isWindows() method /** * Returns if we're running Windows 95/98/ME/NT/2000/XP. */ public static final boolean isWindows() { return os == WINDOWS_9x || os == WINDOWS_NT; } //}}} //{{{ isWindows9x() method /** * Returns if we're running Windows 95/98/ME. */ public static final boolean isWindows9x() { return os == WINDOWS_9x; } //}}} //{{{ isWindowsNT() method /** * Returns if we're running Windows NT/2000/XP. */ public static final boolean isWindowsNT() { return os == WINDOWS_NT; } //}}} //{{{ isOS2() method /** * Returns if we're running OS/2. */ public static final boolean isOS2() { return os == OS2; } //}}} //{{{ isUnix() method /** * Returns if we're running Unix (this includes MacOS X). */ public static final boolean isUnix() { return os == UNIX || os == MAC_OS_X; } //}}} //{{{ isMacOS() method /** * Returns if we're running MacOS X. */ public static final boolean isMacOS() { return os == MAC_OS_X; } //}}} //{{{ isX11() method /** * Returns if this OS is likely to be using X11 as the graphics * system. * @since jEdit 4.2pre3 */ public static boolean isX11() { return os == UNIX; } //}}} //{{{ isVMS() method /** * Returns if we're running VMS. */ public static final boolean isVMS() { return os == VMS; } //}}} //{{{ isMacOSLF() method /** * Returns if we're running MacOS X and using the native look and feel. */ public static final boolean isMacOSLF() { return (isMacOS() && UIManager.getLookAndFeel().isNativeLookAndFeel()); } //}}} //{{{ hasScreenMenuBar /** * Returns whether the screen menu bar on Mac OS X is in use. * @since jEdit 4.2pre1 */ public static final boolean hasScreenMenuBar() { if(!isMacOS()) return false; else if(hasScreenMenuBar == -1) { String result = System.getProperty("apple.laf.useScreenMenuBar"); if (result == null) result = System.getProperty("com.apple.macos.useScreenMenuBar"); hasScreenMenuBar = ("true".equals(result)) ? 1 : 0; } return (hasScreenMenuBar == 1); } //}}} //{{{ isJava14() method /** * Returns if Java 2 version 1.4, or Java 2 version 1.5 is in use. */ public static final boolean hasJava14() { return java14; } //}}} //{{{ isJava15() method /** * Returns if Java 2 version 1.5 is in use. */ public static final boolean hasJava15() { return java15; } //}}} //{{{ Private members private static final int UNIX = 0x31337; private static final int WINDOWS_9x = 0x640; private static final int WINDOWS_NT = 0x666; private static final int OS2 = 0xDEAD; private static final int MAC_OS_X = 0xABC; private static final int VMS = 0xDEAD2; private static final int UNKNOWN = 0xBAD; private static int os; private static boolean java14; private static boolean java15; private static int hasScreenMenuBar = -1; //{{{ Class initializer static { if(System.getProperty("mrj.version") != null) { os = MAC_OS_X; } else { String osName = System.getProperty("os.name"); if(osName.indexOf("Windows 9") != -1 || osName.indexOf("Windows M") != -1) { os = WINDOWS_9x; } else if(osName.indexOf("Windows") != -1) { os = WINDOWS_NT; } else if(osName.indexOf("OS/2") != -1) { os = OS2; } else if(osName.indexOf("VMS") != -1) { os = VMS; } else if(File.separatorChar == '/') { os = UNIX; } else { os = UNKNOWN; Log.log(Log.WARNING,OperatingSystem.class, "Unknown operating system: " + osName); } } // for debugging, make jEdit think its using a different // version of Java than it really is. String javaVersion = System.getProperty("jedit.force.java.version"); if(javaVersion == null || javaVersion.equals("")) javaVersion = System.getProperty("java.version"); java14 = (javaVersion.compareTo("1.4") >= 0); java15 = (javaVersion.compareTo("1.5") >= 0); } //}}} //}}} } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.