mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			244 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Java
		
	
	
	
/* MultiLookAndFeel.java --
 | 
						|
   Copyright (C) 2005 Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath 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, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath 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 GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
package javax.swing.plaf.multi;
 | 
						|
 | 
						|
import java.util.Vector;
 | 
						|
 | 
						|
import javax.swing.JComponent;
 | 
						|
import javax.swing.LookAndFeel;
 | 
						|
import javax.swing.UIDefaults;
 | 
						|
import javax.swing.UIManager;
 | 
						|
import javax.swing.plaf.ComponentUI;
 | 
						|
 | 
						|
/**
 | 
						|
 * A look and feel that provides the ability to use auxiliary look and feels
 | 
						|
 * in addition to the primary look and feel.
 | 
						|
 */
 | 
						|
public class MultiLookAndFeel extends LookAndFeel
 | 
						|
{
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new instance of the look and feel.
 | 
						|
   */
 | 
						|
  public MultiLookAndFeel()
 | 
						|
  {
 | 
						|
    // Nothing to do here.
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the name for the look and feel.
 | 
						|
   *
 | 
						|
   * @return "Multiplexing Look and Feel".
 | 
						|
   */
 | 
						|
  public String getName()
 | 
						|
  {
 | 
						|
    return "Multiplexing Look and Feel";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns an identifier for the look and feel.
 | 
						|
   *
 | 
						|
   * @return "Multiplex".
 | 
						|
   */
 | 
						|
  public String getID()
 | 
						|
  {
 | 
						|
    return "Multiplex";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a description of the look and feel.
 | 
						|
   *
 | 
						|
   * @return A description of the look and feel.
 | 
						|
   */
 | 
						|
  public String getDescription()
 | 
						|
  {
 | 
						|
    return "Allows multiple UI instances per component instance";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns <code>false</code> to indicate that this look and feel is not
 | 
						|
   * native to any platform.
 | 
						|
   *
 | 
						|
   * @return <code>false</code>.
 | 
						|
   */
 | 
						|
  public boolean isNativeLookAndFeel()
 | 
						|
  {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns <code>true</code> always, since this look and feel is supported on
 | 
						|
   * all platforms.
 | 
						|
   *
 | 
						|
   * @return <code>true</code>.
 | 
						|
   */
 | 
						|
  public boolean isSupportedLookAndFeel()
 | 
						|
  {
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates and returns the UI defaults for this look and feel.
 | 
						|
   *
 | 
						|
   * @return The UI defaults.
 | 
						|
   */
 | 
						|
  public UIDefaults getDefaults()
 | 
						|
  {
 | 
						|
    UIDefaults defaults = new UIDefaults();
 | 
						|
    defaults.put("ButtonUI", "javax.swing.plaf.multi.MultiButtonUI");
 | 
						|
    defaults.put("CheckBoxUI", "javax.swing.plaf.multi.MultiButtonUI");
 | 
						|
    defaults.put("CheckBoxMenuItemUI", "javax.swing.plaf.multi.MultiMenuItemUI");
 | 
						|
    defaults.put("ColorChooserUI",
 | 
						|
        "javax.swing.plaf.multi.MultiColorChooserUI");
 | 
						|
    defaults.put("ComboBoxUI", "javax.swing.plaf.multi.MultiComboBoxUI");
 | 
						|
    defaults.put("DesktopPaneUI", "javax.swing.plaf.multi.MultiDesktopPaneUI");
 | 
						|
    defaults.put("DesktopIconUI", "javax.swing.plaf.multi.MultiDesktopIconUI");
 | 
						|
    defaults.put("EditorPaneUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("FileChooserUI", "javax.swing.plaf.multi.MultiFileChooserUI");
 | 
						|
    defaults.put("FormattedTextFieldUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("InternalFrameUI",
 | 
						|
        "javax.swing.plaf.multi.MultiInternalFrameUI");
 | 
						|
    defaults.put("LabelUI", "javax.swing.plaf.multi.MultiLabelUI");
 | 
						|
    defaults.put("ListUI", "javax.swing.plaf.multi.MultiListUI");
 | 
						|
    defaults.put("MenuItemUI", "javax.swing.plaf.multi.MultiMenuItemUI");
 | 
						|
    defaults.put("MenuUI", "javax.swing.plaf.multi.MultiMenuItemUI");
 | 
						|
    defaults.put("MenuBarUI", "javax.swing.plaf.multi.MultiMenuBarUI");
 | 
						|
    defaults.put("OptionPaneUI", "javax.swing.plaf.multi.MultiOptionPaneUI");
 | 
						|
    defaults.put("PanelUI", "javax.swing.plaf.multi.MultiPanelUI");
 | 
						|
    defaults.put("PasswordFieldUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("PopupMenuUI", "javax.swing.plaf.multi.MultiPopupMenuUI");
 | 
						|
    defaults.put("PopupMenuSeparatorUI",
 | 
						|
        "javax.swing.plaf.multi.MultiSeparatorUI");
 | 
						|
    defaults.put("ProgressBarUI", "javax.swing.plaf.multi.MultiProgressBarUI");
 | 
						|
    defaults.put("RadioButtonUI", "javax.swing.plaf.multi.MultiButtonUI");
 | 
						|
    defaults.put("RadioButtonMenuItemUI",
 | 
						|
        "javax.swing.plaf.multi.MultiMenuItemUI");
 | 
						|
    defaults.put("RootPaneUI", "javax.swing.plaf.multi.MultiRootPaneUI");
 | 
						|
    defaults.put("ScrollBarUI", "javax.swing.plaf.multi.MultiScrollBarUI");
 | 
						|
    defaults.put("ScrollPaneUI", "javax.swing.plaf.multi.MultiScrollPaneUI");
 | 
						|
    defaults.put("SeparatorUI", "javax.swing.plaf.multi.MultiSeparatorUI");
 | 
						|
    defaults.put("SliderUI", "javax.swing.plaf.multi.MultiSliderUI");
 | 
						|
    defaults.put("SpinnerUI", "javax.swing.plaf.multi.MultiSpinnerUI");
 | 
						|
    defaults.put("SplitPaneUI", "javax.swing.plaf.multi.MultiSplitPaneUI");
 | 
						|
    defaults.put("TabbedPaneUI", "javax.swing.plaf.multi.MultiTabbedPaneUI");
 | 
						|
    defaults.put("TableHeaderUI", "javax.swing.plaf.multi.MultiTableHeaderUI");
 | 
						|
    defaults.put("TableUI", "javax.swing.plaf.multi.MultiTableUI");
 | 
						|
    defaults.put("TextAreaUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("TextFieldUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("TextPaneUI", "javax.swing.plaf.multi.MultiTextUI");
 | 
						|
    defaults.put("ToggleButtonUI", "javax.swing.plaf.multi.MultiButtonUI");
 | 
						|
    defaults.put("ToolBarSeparatorUI",
 | 
						|
        "javax.swing.plaf.multi.MultiSeparatorUI");
 | 
						|
    defaults.put("ToolBarUI", "javax.swing.plaf.multi.MultiToolBarUI");
 | 
						|
    defaults.put("ToolTipUI", "javax.swing.plaf.multi.MultiToolTipUI");
 | 
						|
    defaults.put("ViewportUI", "javax.swing.plaf.multi.MultiViewportUI");
 | 
						|
    return defaults;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates the UI delegates for the <code>target</code> component and
 | 
						|
   * returns a multiplexing UI delegate (<code>mui</code>) if there are
 | 
						|
   * multiple delegates.
 | 
						|
   *
 | 
						|
   * @param mui  a multiplexing UI delegate appropriate for the component.
 | 
						|
   * @param uis  a vector into which the UI delegates will be added.
 | 
						|
   * @param target  the target component.
 | 
						|
   *
 | 
						|
   * @return A UI delegate.
 | 
						|
   */
 | 
						|
  public static ComponentUI createUIs(ComponentUI mui, Vector uis,
 | 
						|
                                      JComponent target)
 | 
						|
  {
 | 
						|
    // get primary UI delegate for 'target', and add it to uis
 | 
						|
    ComponentUI ui = null;
 | 
						|
    LookAndFeel primary = UIManager.getLookAndFeel();
 | 
						|
    if (primary != null)
 | 
						|
    {
 | 
						|
      ui = UIManager.getUI(target);
 | 
						|
      uis.add(ui);
 | 
						|
    }
 | 
						|
    // for any auxiliary look and feels in use, get the UI delegate and add
 | 
						|
    // it to uis
 | 
						|
    LookAndFeel[] auxlafs = UIManager.getAuxiliaryLookAndFeels();
 | 
						|
    for (int i = 0; i < auxlafs.length; i++)
 | 
						|
    {
 | 
						|
      LookAndFeel auxlaf = auxlafs[i];
 | 
						|
      // FIXME: here I call getDefaults() to get the UI delegate from the
 | 
						|
      // auxiliary look and feel.  But getDefaults() creates a new set of
 | 
						|
      // defaults every time it is called, which is wasteful.  Unfortunately
 | 
						|
      // I cannot find another way to get the UI delegate, so I'm doing it
 | 
						|
      // anyway...
 | 
						|
      UIDefaults defaults = auxlaf.getDefaults();
 | 
						|
      ui = defaults.getUI(target);
 | 
						|
      if (ui != null)
 | 
						|
        uis.add(ui);
 | 
						|
    }
 | 
						|
    // if uis contains more than 1 delegate, return mui, otherwise return
 | 
						|
    // the primary delegate
 | 
						|
    if (uis.size() > 1)
 | 
						|
      return mui;
 | 
						|
    else
 | 
						|
      return ui;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns an array containing the same {@link ComponentUI} instances as
 | 
						|
   * <code>uis</code>.  If <code>uis</code> is <code>null</code>, a zero-length
 | 
						|
   * array is returned.
 | 
						|
   *
 | 
						|
   * @param uis  a list of {@link ComponentUI} references (<code>null</code>
 | 
						|
   *             permitted).
 | 
						|
   *
 | 
						|
   * @return An array containing the same {@link ComponentUI} instances as
 | 
						|
   *         <code>uis</code>, or <code>null</code> if <code>uis</code> is
 | 
						|
   *         empty.
 | 
						|
   */
 | 
						|
  protected static ComponentUI[] uisToArray(Vector uis)
 | 
						|
  {
 | 
						|
    if (uis == null)
 | 
						|
      return new ComponentUI[0];
 | 
						|
    int size = uis.size();
 | 
						|
    if (size == 0)
 | 
						|
      return null;
 | 
						|
    ComponentUI[] result = new ComponentUI[size];
 | 
						|
    uis.copyInto(result);
 | 
						|
    return result;
 | 
						|
  }
 | 
						|
 | 
						|
}
 |