/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import javax.swing.plaf.metal.MetalInternalFrameUI;
import de.muntjak.tinylookandfeel.borders.*;
/**
* TinyInternalFrameUI
*
* 6.4.06 Removed getDesktopManager() and
* createDesktopManager() (will now be
* handled by the base class).
*
* @version 1.3.04
* @author Hans Bickel
*/
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);
}
}
}