package sale;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MenuSheetItem extends MenuSheetObject implements ActionListener {
protected transient JMenuItem m_jmiPeer = null;
protected transient JMenu m_jmMenuPeer = null;
private transient Object m_oPeerLock;
protected Object getPeerLock() {
if (m_oPeerLock == null) {
m_oPeerLock = new Object();
}
return m_oPeerLock;
}
protected Action m_aAction;
private transient Object m_oActionLock;
protected Object getActionLock() {
if (m_oActionLock == null) {
m_oActionLock = new Object();
}
return m_oActionLock;
}
private boolean m_fEnabled = true;
protected Image m_aiImages[] = null;
protected char m_cMnemonic;
protected KeyStroke m_ksKeyStroke;
private void writeObject (java.io.ObjectOutputStream oos)
throws java.io.IOException {
util.Debug.print ("Starting to write menu sheet item: \"" + getCaption () + "\" <" + getTag () + ">", -1);
oos.defaultWriteObject ();
util.Debug.print ("Done writing menu sheet item: \"" + getCaption () + "\" <" + getTag () + ">", -1);
}
public MenuSheetItem (String sCaption,
String sTag,
Action aAction,
char cMnemonic) {
super (sCaption, sTag);
m_cMnemonic = cMnemonic;
m_aAction = aAction;
}
public MenuSheetItem (String sCaption,
String sTag,
Action aAction) {
this (sCaption, sTag, aAction, '\0');
}
public MenuSheetItem (String sCaption,
Action aAction) {
this (sCaption, null, aAction, '\0');
}
private void setIcon (ImageIcon iiImageIcon, int nIndex) {
if (m_aiImages == null)
m_aiImages = new Image[4];
m_aiImages[nIndex] = iiImageIcon.getImage();
synchronized (getPeerLock()) {
if (m_jmiPeer != null) {
switch (nIndex) {
case DEFAULT_IMAGE:
m_jmiPeer.setIcon (iiImageIcon);
break;
case SELECTED_IMAGE:
m_jmiPeer.setSelectedIcon (iiImageIcon);
break;
case DISABLED_IMAGE:
m_jmiPeer.setDisabledIcon (iiImageIcon);
break;
case DISABLED_SELECTED_IMAGE:
m_jmiPeer.setDisabledSelectedIcon (iiImageIcon);
break;
}
}
if (m_jmMenuPeer != null) {
switch (nIndex) {
case DEFAULT_IMAGE:
m_jmMenuPeer.getItem(0).setIcon (iiImageIcon);
break;
case SELECTED_IMAGE:
m_jmMenuPeer.getItem(0).setSelectedIcon (iiImageIcon);
break;
case DISABLED_IMAGE:
m_jmMenuPeer.getItem(0).setDisabledIcon (iiImageIcon);
break;
case DISABLED_SELECTED_IMAGE:
m_jmMenuPeer.getItem(0).setDisabledSelectedIcon (iiImageIcon);
break;
}
}
}
}
public void setCaption (String sCaption) {
synchronized (getPeerLock()) {
if (m_jmiPeer != null) {
m_jmiPeer.setText (sCaption);
}
if (m_jmMenuPeer != null) {
m_jmMenuPeer.setText (sCaption);
m_jmMenuPeer.getItem (0).setText (sCaption);
}
}
super.setCaption (sCaption);
}
public void setEnabled (boolean fEnabled) {
m_fEnabled = fEnabled;
synchronized (getPeerLock()) {
if (m_jmiPeer != null) {
m_jmiPeer.setEnabled (fEnabled);
}
if (m_jmMenuPeer != null) {
m_jmMenuPeer.getItem (0).setEnabled (fEnabled);
}
}
}
public boolean isEnabled() {
return m_fEnabled;
}
public void setVisible (boolean fVisible) {
super.setVisible (fVisible);
if (!fVisible) {
synchronized (getPeerLock()) {
m_jmiPeer = null;
m_jmMenuPeer = null;
}
}
}
public Action setAction (Action aAction) {
Action aOld = null;
synchronized (getActionLock()) {
aOld = m_aAction;
m_aAction = aAction;
}
return aOld;
}
public void setMnemonic (char cMnemonic) {
m_cMnemonic = cMnemonic;
synchronized (getPeerLock()) {
if (m_jmiPeer != null) {
m_jmiPeer.setMnemonic (cMnemonic);
}
if (m_jmMenuPeer != null) {
m_jmMenuPeer.getItem(0).setMnemonic (cMnemonic);
}
}
}
public void setAccelerator (KeyStroke ks) {
m_ksKeyStroke = ks;
synchronized (getPeerLock()) {
if (m_jmiPeer != null) {
m_jmiPeer.setAccelerator (ks);
}
if (m_jmMenuPeer != null) {
m_jmMenuPeer.getItem(0).setAccelerator (ks);
}
}
}
public void setDefaultIcon (ImageIcon iiImageIcon) {
setIcon (iiImageIcon, DEFAULT_IMAGE);
}
public void setSelectedIcon (ImageIcon iiImageIcon) {
setIcon (iiImageIcon, SELECTED_IMAGE);
}
public void setDisabledIcon (ImageIcon iiImageIcon) {
setIcon (iiImageIcon, DISABLED_IMAGE);
}
public void setDisabledSelectedIcon (ImageIcon iiImageIcon) {
setIcon (iiImageIcon, DISABLED_SELECTED_IMAGE);
}
public JMenuItem getPeer() {
synchronized (getPeerLock()) {
if (m_jmiPeer == null) {
m_jmiPeer = new JMenuItem (getCaption());
m_jmiPeer.addActionListener (this);
if (m_cMnemonic != '\0')
m_jmiPeer.setMnemonic (m_cMnemonic);
if (m_ksKeyStroke != null)
m_jmiPeer.setAccelerator (m_ksKeyStroke);
if (m_aiImages != null) {
if (m_aiImages[DEFAULT_IMAGE] != null)
m_jmiPeer.setIcon (new ImageIcon ((Image)m_aiImages[DEFAULT_IMAGE]));
if (m_aiImages[SELECTED_IMAGE] != null)
m_jmiPeer.setPressedIcon (new ImageIcon ((Image)m_aiImages[SELECTED_IMAGE]));
if (m_aiImages[DISABLED_IMAGE] != null)
m_jmiPeer.setDisabledIcon (new ImageIcon ((Image)m_aiImages[DISABLED_IMAGE]));
if (m_aiImages[DISABLED_SELECTED_IMAGE] != null)
m_jmiPeer.setDisabledSelectedIcon (new ImageIcon ((Image)m_aiImages[DISABLED_SELECTED_IMAGE]));
}
m_jmiPeer.setEnabled (m_fEnabled);
}
}
return m_jmiPeer;
}
public JMenu getMenuPeer() {
synchronized (getPeerLock()) {
if (m_jmMenuPeer == null) {
m_jmMenuPeer = new JMenu (getCaption());
JMenuItem jmi = m_jmMenuPeer.add (getCaption());
jmi.addActionListener (this);
if (m_cMnemonic != '\0')
jmi.setMnemonic (m_cMnemonic);
if (m_ksKeyStroke != null)
jmi.setAccelerator (m_ksKeyStroke);
if (m_aiImages != null) {
if (m_aiImages[DEFAULT_IMAGE] != null)
jmi.setIcon (new ImageIcon ((Image)m_aiImages[DEFAULT_IMAGE]));
if (m_aiImages[SELECTED_IMAGE] != null)
jmi.setPressedIcon (new ImageIcon ((Image)m_aiImages[SELECTED_IMAGE]));
if (m_aiImages[DISABLED_IMAGE] != null)
jmi.setDisabledIcon (new ImageIcon ((Image)m_aiImages[DISABLED_IMAGE]));
if (m_aiImages[DISABLED_SELECTED_IMAGE] != null)
jmi.setDisabledSelectedIcon (new ImageIcon ((Image)m_aiImages[DISABLED_SELECTED_IMAGE]));
}
jmi.setEnabled (m_fEnabled);
}
}
return m_jmMenuPeer;
}
public void actionPerformed (ActionEvent e) {
final Action[] aaTemp = new Action[1];
synchronized (getActionLock()) {
aaTemp[0] = m_aAction;
}
if (aaTemp[0] != null) {
new Thread ("ActionPerfomer: MenuSheetItem: \"" + getCaption() + "\"") {
public void run() {
try {
aaTemp[0].doAction (m_pAttached, m_spAttached);
}
catch (ThreadDeath td) {
throw td;
}
catch (Throwable t) {
System.err.println ("Exception occured during event dispatching: MenuSheetItem \"" + getCaption() + "\":");
t.printStackTrace();
}
}
}.start();
}
}
public char getMnemonic() {
return m_cMnemonic;
}
public KeyStroke getAccelerator() {
return m_ksKeyStroke;
}
public ImageIcon getDefaultIcon() {
return (m_aiImages != null)? new ImageIcon ((Image)m_aiImages[DEFAULT_IMAGE]) : null;
}
public ImageIcon getSelectedIcon() {
return (m_aiImages != null)? new ImageIcon ((Image)m_aiImages[SELECTED_IMAGE]) : null;
}
public ImageIcon getDisabledIcon() {
return (m_aiImages != null)? new ImageIcon ((Image)m_aiImages[DISABLED_IMAGE]) : null;
}
public ImageIcon getDisabledSelectedIcon() {
return (m_aiImages != null)? new ImageIcon ((Image)m_aiImages[DISABLED_SELECTED_IMAGE]) : null;
}
private final static int DEFAULT_IMAGE = 0;
private final static int SELECTED_IMAGE = 1;
private final static int DISABLED_IMAGE = 2;
private final static int DISABLED_SELECTED_IMAGE = 3;
}