/**
*
*/
package org.squidy.designer.component;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JWindow;
/**
* <code>TransparentWindow</code>.
*
* <pre>
* Date: 07.05.2010
* Time: 15:49:00
* </pre>
*
* @author Roman Rädle, <a
* href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle@uni-konstanz.de</a>,
* University of Konstanz
* @version $Id$
* @since 1.5.0
*/
public abstract class TransparentWindow extends JWindow {
protected TransparentBackground backgroundComponent = new TransparentBackground();
private MouseListener disposeOnMouseExitListener;
public TransparentWindow(int width, int height) {
Dimension size = new Dimension(width, height);
setSize(size);
setPreferredSize(size);
backgroundComponent.setBounds(0, 0, width, height);
super.add(backgroundComponent);
}
public void disposeOnMouseExit(final boolean disposeOnMouseExit) {
if (disposeOnMouseExit && disposeOnMouseExitListener == null) {
disposeOnMouseExitListener = new MouseAdapter() {
/* (non-Javadoc)
* @see java.awt.event.MouseAdapter#mouseExited(java.awt.event.MouseEvent)
*/
@Override
public void mouseExited(MouseEvent e) {
super.mouseExited(e);
if (disposeOnMouseExit) {
setVisible(false);
dispose();
}
}
};
addMouseListener(disposeOnMouseExitListener);
}
else if (!disposeOnMouseExit && disposeOnMouseExitListener == null) {
removeMouseListener(disposeOnMouseExitListener);
disposeOnMouseExitListener = null;
}
}
/* (non-Javadoc)
* @see java.awt.Container#add(java.awt.Component)
*/
@Override
public Component add(Component component) {
return backgroundComponent.add(component);
}
/* (non-Javadoc)
* @see javax.swing.JWindow#setLayout(java.awt.LayoutManager)
*/
@Override
public void setLayout(LayoutManager manager) {
if (backgroundComponent != null) {
backgroundComponent.setLayout(manager);
}
else {
super.setLayout(manager);
}
}
/* (non-Javadoc)
* @see java.awt.Component#setLocation(int, int)
*/
@Override
public void setLocation(int x, int y) {
super.setLocation(x, y);
if (backgroundComponent != null) {
backgroundComponent.updateBackground();
}
}
/* (non-Javadoc)
* @see java.awt.Component#setLocation(java.awt.Point)
*/
@Override
public void setLocation(Point p) {
super.setLocation(p);
backgroundComponent.updateBackground();
}
public void centerToPointer() {
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
Point p = pointerInfo.getLocation();
setLocation((int) p.getX() - (getWidth() / 2), (int) p.getY() - (getHeight() / 2));
}
/* (non-Javadoc)
* @see java.awt.Window#pack()
*/
@Override
public void pack() {
super.pack();
backgroundComponent.updateBackground();
}
}