/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For
* licensing information and credits, please refer to the * comment in file
* de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
package de.muntjak.tinylookandfeel;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import de.muntjak.tinylookandfeel.borders.TinyInternalFrameBorder;
/**
* TinyInternalFrameUI 6.4.06 Removed getDesktopManager() and
* createDesktopManager() (will now be handled by the base class).
*
* @version 1.3.04
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class TinyInternalFrameUI extends BasicInternalFrameUI
{
private TinyInternalFrameBorder frameBorder;
/**
* The TinyLaF version of the internal frame title pane.
*/
private TinyInternalFrameTitlePane titlePane;
/**
* Creates the UI delegate for the given frame.
*
* @param frame The frame to create its UI delegate.
*/
public TinyInternalFrameUI ( JInternalFrame frame )
{
super ( frame );
}
/**
* Creates the UI delegate for the given component.
*
* @param mainColor The component to create its UI delegate.
* @return The UI delegate for the given component.
*/
public static ComponentUI createUI ( JComponent c )
{
return new TinyInternalFrameUI ( ( JInternalFrame ) c );
}
JDesktopPane getDesktopPane ( JComponent frame )
{
JDesktopPane pane = null;
Component c = frame.getParent ();
// Find the JDesktopPane
while ( pane == null )
{
if ( c instanceof JDesktopPane )
{
pane = ( JDesktopPane ) c;
}
else if ( c == null )
{
break;
}
else
{
c = c.getParent ();
}
}
return pane;
}
public void installUI ( JComponent c )
{
super.installUI ( c );
frameBorder = new TinyInternalFrameBorder ();
frame.setBorder ( frameBorder );
if ( Theme.frameIsTransparent [ Theme.derivedStyle [ Theme.style ] ] )
{
frame.setOpaque ( false );
}
}
protected PropertyChangeListener createPropertyChangeListener ()
{
return new TinyInternalFramePropertyChangeListener ();
}
/**
* Creates the north pane (the internal frame title pane) for the given frame.
*
* @param frame The frame to create its north pane.
*/
protected JComponent createNorthPane ( JInternalFrame frame )
{
super.createNorthPane ( frame );
titlePane = new TinyInternalFrameTitlePane ( frame );
return titlePane;
}
protected void activateFrame ( JInternalFrame f )
{
super.activateFrame ( f );
frameBorder.setActive ( true );
titlePane.activate ();
}
/**
* This method is called when the frame is no longer selected. This action is
* delegated to the desktopManager.
*/
protected void deactivateFrame ( JInternalFrame f )
{
super.deactivateFrame ( f );
frameBorder.setActive ( false );
titlePane.deactivate ();
}
/**
* Changes this internal frame mode from / to palette mode. This affect only
* the title pane.
*
* @param isPalette The target palette mode.
*/
public void setPalette ( boolean isPalette )
{
// the following call caused iconify and maximize
// buttons to disappear for palettes
// super.setPalette(isPalette);
titlePane.setPalette ( isPalette );
frame.setBorder ( frameBorder );
frame.putClientProperty ( "isPalette", isPalette ? Boolean.TRUE
: Boolean.FALSE );
}
public class TinyInternalFramePropertyChangeListener extends
InternalFramePropertyChangeListener
{
public void propertyChange ( PropertyChangeEvent evt )
{
String prop = ( String ) evt.getPropertyName ();
JInternalFrame f = ( JInternalFrame ) evt.getSource ();
TinyInternalFrameUI ui = ( TinyInternalFrameUI ) f.getUI ();
if ( prop.equals ( "JInternalFrame.isPalette" ) )
{
if ( evt.getNewValue () != null )
{
ui.setPalette ( ( ( Boolean ) evt.getNewValue () ).booleanValue () );
}
else
{
ui.setPalette ( false );
}
}
super.propertyChange ( evt );
}
}
}