/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.api.gui.util;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
@SuppressWarnings("serial")
public abstract class DynamicMenu extends JMenu {
public DynamicMenu() {
super();
}
public DynamicMenu(Action a) {
super(a);
}
public DynamicMenu(String s, boolean b) {
super(s, b);
}
public DynamicMenu(String s) {
super(s);
}
public abstract void popupMenuWillBecomeVisible();
public void popupMenuWillBecomeInvisible() {
removeAll();
}
public void popupMenuCanceled() {
}
public void addPopupMenuListener() {
// #WEA-6 - workaround, PopupMenuListener doesn't work on Mac in the top bar with native look and feel
if (AppProperties.isMacNativeLookAndFeel()) {
this.addChangeListener(e -> {
if (DynamicMenu.this.isSelected()) {
DynamicMenu.this.popupMenuWillBecomeVisible();
} else {
DynamicMenu.this.popupMenuWillBecomeInvisible();
}
});
} else {
JPopupMenu menuExport = this.getPopupMenu();
menuExport.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
DynamicMenu.this.popupMenuWillBecomeVisible();
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
DynamicMenu.this.popupMenuWillBecomeInvisible();
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
DynamicMenu.this.popupMenuCanceled();
}
});
}
}
}