You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
7.2 KiB
256 lines
7.2 KiB
/*
|
|
* Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
package javax.swing.plaf.metal;
|
|
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import javax.swing.*;
|
|
import javax.swing.event.*;
|
|
import javax.swing.border.*;
|
|
import javax.swing.plaf.basic.*;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.beans.PropertyChangeEvent;
|
|
import javax.swing.plaf.*;
|
|
|
|
/**
|
|
* Metal implementation of JInternalFrame.
|
|
* <p>
|
|
*
|
|
* @author Steve Wilson
|
|
*/
|
|
public class MetalInternalFrameUI extends BasicInternalFrameUI {
|
|
|
|
private static final PropertyChangeListener metalPropertyChangeListener =
|
|
new MetalPropertyChangeHandler();
|
|
|
|
private static final Border handyEmptyBorder = new EmptyBorder(0,0,0,0);
|
|
|
|
protected static String IS_PALETTE = "JInternalFrame.isPalette";
|
|
private static String IS_PALETTE_KEY = "JInternalFrame.isPalette";
|
|
private static String FRAME_TYPE = "JInternalFrame.frameType";
|
|
private static String NORMAL_FRAME = "normal";
|
|
private static String PALETTE_FRAME = "palette";
|
|
private static String OPTION_DIALOG = "optionDialog";
|
|
|
|
public MetalInternalFrameUI(JInternalFrame b) {
|
|
super(b);
|
|
}
|
|
|
|
public static ComponentUI createUI(JComponent c) {
|
|
return new MetalInternalFrameUI( (JInternalFrame) c);
|
|
}
|
|
|
|
public void installUI(JComponent c) {
|
|
super.installUI(c);
|
|
|
|
Object paletteProp = c.getClientProperty(IS_PALETTE_KEY);
|
|
if ( paletteProp != null ) {
|
|
setPalette( ((Boolean)paletteProp).booleanValue() );
|
|
}
|
|
|
|
Container content = frame.getContentPane();
|
|
stripContentBorder(content);
|
|
//c.setOpaque(false);
|
|
}
|
|
|
|
public void uninstallUI(JComponent c) {
|
|
frame = (JInternalFrame)c;
|
|
|
|
Container cont = ((JInternalFrame)(c)).getContentPane();
|
|
if (cont instanceof JComponent) {
|
|
JComponent content = (JComponent)cont;
|
|
if ( content.getBorder() == handyEmptyBorder) {
|
|
content.setBorder(null);
|
|
}
|
|
}
|
|
super.uninstallUI(c);
|
|
}
|
|
|
|
protected void installListeners() {
|
|
super.installListeners();
|
|
frame.addPropertyChangeListener(metalPropertyChangeListener);
|
|
}
|
|
|
|
protected void uninstallListeners() {
|
|
frame.removePropertyChangeListener(metalPropertyChangeListener);
|
|
super.uninstallListeners();
|
|
}
|
|
|
|
protected void installKeyboardActions(){
|
|
super.installKeyboardActions();
|
|
ActionMap map = SwingUtilities.getUIActionMap(frame);
|
|
if (map != null) {
|
|
// BasicInternalFrameUI creates an action with the same name, we override
|
|
// it as Metal frames do not have system menus.
|
|
map.remove("showSystemMenu");
|
|
}
|
|
}
|
|
|
|
protected void uninstallKeyboardActions(){
|
|
super.uninstallKeyboardActions();
|
|
}
|
|
|
|
protected void uninstallComponents() {
|
|
titlePane = null;
|
|
super.uninstallComponents();
|
|
}
|
|
|
|
private void stripContentBorder(Object c) {
|
|
if ( c instanceof JComponent ) {
|
|
JComponent contentComp = (JComponent)c;
|
|
Border contentBorder = contentComp.getBorder();
|
|
if (contentBorder == null || contentBorder instanceof UIResource) {
|
|
contentComp.setBorder( handyEmptyBorder );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protected JComponent createNorthPane(JInternalFrame w) {
|
|
return new MetalInternalFrameTitlePane(w);
|
|
}
|
|
|
|
|
|
private void setFrameType( String frameType )
|
|
{
|
|
if ( frameType.equals( OPTION_DIALOG ) )
|
|
{
|
|
LookAndFeel.installBorder(frame, "InternalFrame.optionDialogBorder");
|
|
((MetalInternalFrameTitlePane)titlePane).setPalette( false );
|
|
}
|
|
else if ( frameType.equals( PALETTE_FRAME ) )
|
|
{
|
|
LookAndFeel.installBorder(frame, "InternalFrame.paletteBorder");
|
|
((MetalInternalFrameTitlePane)titlePane).setPalette( true );
|
|
}
|
|
else
|
|
{
|
|
LookAndFeel.installBorder(frame, "InternalFrame.border");
|
|
((MetalInternalFrameTitlePane)titlePane).setPalette( false );
|
|
}
|
|
}
|
|
|
|
// this should be deprecated - jcs
|
|
public void setPalette(boolean isPalette) {
|
|
if (isPalette) {
|
|
LookAndFeel.installBorder(frame, "InternalFrame.paletteBorder");
|
|
} else {
|
|
LookAndFeel.installBorder(frame, "InternalFrame.border");
|
|
}
|
|
((MetalInternalFrameTitlePane)titlePane).setPalette(isPalette);
|
|
|
|
}
|
|
|
|
private static class MetalPropertyChangeHandler implements
|
|
PropertyChangeListener
|
|
{
|
|
public void propertyChange(PropertyChangeEvent e)
|
|
{
|
|
String name = e.getPropertyName();
|
|
JInternalFrame jif = (JInternalFrame)e.getSource();
|
|
|
|
if (!(jif.getUI() instanceof MetalInternalFrameUI)) {
|
|
return;
|
|
}
|
|
|
|
MetalInternalFrameUI ui = (MetalInternalFrameUI)jif.getUI();
|
|
|
|
if ( name.equals( FRAME_TYPE ) )
|
|
{
|
|
if ( e.getNewValue() instanceof String )
|
|
{
|
|
ui.setFrameType( (String) e.getNewValue() );
|
|
}
|
|
}
|
|
else if ( name.equals(IS_PALETTE_KEY) )
|
|
{
|
|
if ( e.getNewValue() != null )
|
|
{
|
|
ui.setPalette( ((Boolean)e.getNewValue()).booleanValue() );
|
|
}
|
|
else
|
|
{
|
|
ui.setPalette( false );
|
|
}
|
|
} else if ( name.equals( JInternalFrame.CONTENT_PANE_PROPERTY ) ) {
|
|
ui.stripContentBorder(e.getNewValue());
|
|
}
|
|
}
|
|
} // end class MetalPropertyChangeHandler
|
|
|
|
|
|
private class BorderListener1 extends BorderListener implements SwingConstants
|
|
{
|
|
|
|
Rectangle getIconBounds() {
|
|
boolean leftToRight = MetalUtils.isLeftToRight(frame);
|
|
int xOffset = leftToRight ? 5 : titlePane.getWidth() - 5;
|
|
Rectangle rect = null;
|
|
|
|
Icon icon = frame.getFrameIcon();
|
|
if ( icon != null ) {
|
|
if ( !leftToRight ) {
|
|
xOffset -= icon.getIconWidth();
|
|
}
|
|
int iconY = ((titlePane.getHeight() / 2) - (icon.getIconHeight() /2));
|
|
rect = new Rectangle(xOffset, iconY,
|
|
icon.getIconWidth(), icon.getIconHeight());
|
|
}
|
|
return rect;
|
|
}
|
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
if (e.getClickCount() == 2 && e.getSource() == getNorthPane() &&
|
|
frame.isClosable() && !frame.isIcon()) {
|
|
Rectangle rect = getIconBounds();
|
|
if ((rect != null) && rect.contains(e.getX(), e.getY())) {
|
|
frame.doDefaultCloseAction();
|
|
}
|
|
else {
|
|
super.mouseClicked(e);
|
|
}
|
|
}
|
|
else {
|
|
super.mouseClicked(e);
|
|
}
|
|
}
|
|
}; /// End BorderListener Class
|
|
|
|
|
|
/**
|
|
* Returns the <code>MouseInputAdapter</code> that will be installed
|
|
* on the TitlePane.
|
|
*
|
|
* @param w the <code>JInternalFrame</code>
|
|
* @return the <code>MouseInputAdapter</code> that will be installed
|
|
* on the TitlePane.
|
|
* @since 1.6
|
|
*/
|
|
protected MouseInputAdapter createBorderListener(JInternalFrame w) {
|
|
return new BorderListener1();
|
|
}
|
|
}
|