package jmathlib.ui.swing;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This class creates the console context menu at mouse's right click on the
* console.
*/
public class ConsoleContextMenu extends MouseAdapter
{
JPopupMenu sjpm = null;
public ConsoleContextMenu()
{
}
@Override
public void mousePressed(MouseEvent mev)
{
int b = mev.getButton();
if ((b & MouseEvent.BUTTON2) == MouseEvent.BUTTON2)
{
showPopupMenu(mev, true);
}
else if ((b & MouseEvent.BUTTON1) == MouseEvent.BUTTON1)
{
showPopupMenu(mev, false);
}
}
private void showPopupMenu(MouseEvent mev, boolean show)
{
SwingGUI ref = SwingGUI.runningReference;
JPopupMenu jpm = sjpm;
if (show)
{
if (jpm == null)
{
jpm = new JPopupMenu();
sjpm = jpm;
int j = ref.jMenu2.getItemCount();
JMenuItem[] jmi = new JMenuItem[j];
// See DN0009
for (int i = 0; i < j; i++)
{
JMenuItem jmit;
jmit= ref.jMenu2.getItem(i);
if (jmit == null)
{
jpm.addSeparator();
continue;
}
jmi[i] = new JMenuItem();
jmi[i].setText(jmit.getText());
jmi[i].setMnemonic(jmit.getMnemonic());
ActionListener[] al = jmit.getActionListeners();
for (int ii = al.length-1; ii >= 0; ii--)
{
jmi[i].addActionListener(al[ii]);
}
FocusListener[] fl = jmit.getFocusListeners();
for (int ii = fl.length-1; ii >= 0; ii--)
{
jmi[i].addFocusListener(fl[ii]);
}
jpm.add(jmi[i]);
}
}
Console c = (Console) mev.getSource();
// Now let's place the context menu taking care about not
// drawing it outside the screen
Point p = c.getLocationOnScreen();
Point q = mev.getPoint();
p.x += q.x;
p.y += q.y;
Dimension jpmd = jpm.getSize();
q.x = p.x + jpmd.width;
q.y = p.y + jpmd.height;
Dimension sd = Toolkit.getDefaultToolkit().getScreenSize();
if (q.x > sd.width)
{
p.x -= jpmd.width;
}
if (q.y > sd.height)
{
p.y -= jpmd.height;
}
jpm.setLocation(p);
jpm.setVisible(true);
}
else if (!show && jpm != null)
{
jpm.setVisible(false);
}
}
}