package app.navigps.gui;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import javax.swing.Icon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.Timer;
import javax.swing.event.MouseInputAdapter;
/**
*
* @author Grzegorz (vara) Warywoda
*/
public class MyPopupMenu extends JPopupMenu{
private Timer closeTimer;
private int closeDelay = 5000;
private PopupMouseListener mouseListenr = new PopupMouseListener();
public MyPopupMenu(){
this(null);
}
public MyPopupMenu(String title){
super(title);
setLightWeightPopupEnabled(true);
setAlignmentX(100);
init();
}
private void init(){
initialTimer();
installListeners();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
uninstallMaouseListener();
closeTimer = null;
System.err.println("MyPopupMenu "+getName()+" finalize !!!");
}
private void initialTimer(){
closeTimer = new Timer(closeDelay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(isVisible())
setVisible(false);
}
});
closeTimer.setRepeats(false);
}
private void installListeners(){
addMouseListener(mouseListenr);
addMouseMotionListener(mouseListenr);
}
private void uninstallMaouseListener(){
removeMouseListener(mouseListenr);
removeMouseMotionListener(mouseListenr);
}
public void setTimeToClose(int closeInit){
closeDelay = closeInit;
closeTimer.setDelay(closeDelay);
}
public void addToPopup(JMenuItem [] item){
if(item.length>0){
for(int i=0;i<item.length;i++)
add(item[i]);
}
}
@Override
public void show(Component invoker, int x, int y) {
super.show(invoker, x, y);
}
@Override
protected void processMouseEvent(MouseEvent e) {
super.processMouseEvent(e);
//System.out.println("***"+e);
}
@Override
public void processMouseEvent(MouseEvent event, MenuElement[] path, MenuSelectionManager manager) {
super.processMouseEvent(event, path, manager);
System.out.println("***"+event);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//final Graphics2D g2 = (Graphics2D) g;
//g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
//GradientPaint gradient1 = new GradientPaint(0.0f, (float) getHeight(),new Color(174,201,255),
// 0.0f, 8.5f, Color.white);
//Rectangle rec1 = new Rectangle(0, 0, getWidth(), getHeight());
//g2.setPaint(gradient1);
//g2.fill(rec1);
}
public static JMenuItem menuItem(String str, Icon icon, int mnemo, String skrot, ActionListener al){
JMenuItem mi = new JMenuItem(str, icon);
mi.setMnemonic(mnemo);
mi.setAccelerator(KeyStroke.getKeyStroke(skrot));
mi.addActionListener(al);
return mi;
}
private class PopupMouseListener extends MouseInputAdapter{
@Override
public void mouseExited(MouseEvent e) {
//System.err.println("MouseExited close timer start");
//Rectangle rec = getBounds();
//System.out.println(""+rec);
closeTimer.start();
}
@Override
public void mouseEntered(MouseEvent e) {
//System.err.println("MouseEntered close timer start");
if(closeTimer.isRunning()){
closeTimer.stop();
}
}
@Override
public void mouseMoved(MouseEvent e) {
super.mouseMoved(e);
//System.out.println(""+e);
}
}
}