package org.opentrafficsim.swing.gui; import java.awt.Component; import java.awt.Font; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Dictionary; import java.util.Enumeration; import java.util.Properties; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSlider; import javax.swing.MenuElement; import javax.swing.MenuSelectionManager; import javax.swing.WindowConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.djutils.draw.bounds.Bounds2d; import org.opentrafficsim.core.animation.gtu.colorer.DefaultSwitchableGtuColorer; import org.opentrafficsim.core.animation.gtu.colorer.GtuColorer; import org.opentrafficsim.core.dsol.OTSModelInterface; import nl.tudelft.simulation.dsol.swing.animation.D2.AnimationPanel; /** * Wrap a DSOL simulation model, or any (descendant of a) JPanel in a JFrame (wrap it in a window). The window will be * maximized. *
* Copyright (c) 2013-2021 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License.
*
* Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
*
* BSD-style license. See OpenTrafficSim License.
*
* @version $Revision$, $LastChangedDate$, by $Author$, initial version 6 feb. 2018
* @author Alexander Verbraeck
* @author Peter Knoppers
* @author Wouter Schakel
*/
private class SubMenuShower extends MouseAdapter
{
/** The menu. */
private JMenu menu;
/**
* Constructor.
* @param menu JMenu; menu
*/
SubMenuShower(final JMenu menu)
{
this.menu = menu;
}
/** {@inheritDoc} */
@Override
public void mouseEntered(final MouseEvent e)
{
MenuSelectionManager.defaultManager().setSelectedPath(
new MenuElement[] {(MenuElement) this.menu.getParent(), this.menu, this.menu.getPopupMenu()});
}
/** {@inheritDoc} */
@Override
public String toString()
{
return "SubMenuShower [menu=" + this.menu + "]";
}
}
/**
* Check box item that keeps the popup menu visible after clicking, so the user can click and try some options.
*
* Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
*
* BSD-style license. See OpenTrafficSim License.
*
* @version $Revision$, $LastChangedDate$, by $Author$, initial version 6 feb. 2018
* @author Alexander Verbraeck
* @author Peter Knoppers
* @author Wouter Schakel
*/
private static class StayOpenCheckBoxMenuItem extends JCheckBoxMenuItem implements AppearanceControl
{
/** */
private static final long serialVersionUID = 20180206L;
/** Stored selection path. */
private static MenuElement[] path;
{
getModel().addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(final ChangeEvent e)
{
if (getModel().isArmed() && isShowing())
{
setPath(MenuSelectionManager.defaultManager().getSelectedPath());
}
}
});
}
/**
* Sets the path.
* @param path MenuElement[]; path
*/
public static void setPath(final MenuElement[] path)
{
StayOpenCheckBoxMenuItem.path = path;
}
/**
* Constructor.
* @param text String; menu item text
* @param selected boolean; if the item is selected
*/
StayOpenCheckBoxMenuItem(final String text, final boolean selected)
{
super(text, selected);
}
/** {@inheritDoc} */
@Override
public void doClick(final int pressTime)
{
super.doClick(pressTime);
for (MenuElement element : path)
{
if (element instanceof JComponent)
{
((JComponent) element).setVisible(true);
}
}
JMenu menu = (JMenu) path[path.length - 3];
MenuSelectionManager.defaultManager()
.setSelectedPath(new MenuElement[] {(MenuElement) menu.getParent(), menu, menu.getPopupMenu()});
}
/** {@inheritDoc} */
@Override
public boolean isFont()
{
return true;
}
/** {@inheritDoc} */
@Override
public String toString()
{
return "StayOpenCheckBoxMenuItem []";
}
}
}