01: //The contents of this file are subject to the Mozilla Public License Version 1.1
02: //(the "License"); you may not use this file except in compliance with the
03: //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
04: //
05: //Software distributed under the License is distributed on an "AS IS" basis,
06: //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
07: //for the specific language governing rights and
08: //limitations under the License.
09: //
10: //The Original Code is "The Columba Project"
11: //
12: //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13: //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14: //
15: //All Rights Reserved.
16: package org.columba.core.gui.action;
17:
18: import java.awt.event.ItemEvent;
19: import java.awt.event.ItemListener;
20: import java.beans.PropertyChangeListener;
21: import java.lang.reflect.Proxy;
22:
23: import javax.swing.Action;
24: import javax.swing.JCheckBoxMenuItem;
25:
26: import org.columba.core.gui.base.ButtonStateAdapter;
27: import org.columba.core.gui.base.MnemonicSetter;
28:
29: /**
30: * Adds an Observer to JCheckBoxMenuItem in order to make it possible
31: * to receive selection state changes from its underlying action.
32: *
33: * @author fdietz
34: */
35:
36: public class CCheckBoxMenuItem extends JCheckBoxMenuItem {
37: /**
38: * default constructor
39: */
40: public CCheckBoxMenuItem() {
41: super ();
42: }
43:
44: /**
45: * Creates a checkbox menu item with a given action attached.
46: * <br>
47: * If the name of the action contains &, the next character is used as
48: * mnemonic. If not, the fall-back solution is to use default behaviour,
49: * i.e. the mnemonic defined using setMnemonic on the action.
50: *
51: * @param action The action to attach to the menu item
52: */
53: public CCheckBoxMenuItem(AbstractSelectableAction action) {
54: super (action);
55:
56: // Set text, possibly with a mnemonic if defined using &
57: MnemonicSetter.setTextWithMnemonic(this , (String) action
58: .getValue(Action.NAME));
59: getModel().addItemListener(new ItemListener() {
60: public void itemStateChanged(ItemEvent e) {
61: AbstractSelectableAction a = (AbstractSelectableAction) getAction();
62:
63: if (a != null) {
64: a
65: .setState(e.getStateChange() == ItemEvent.SELECTED);
66: }
67: }
68: });
69: }
70:
71: /**
72: * Overridden to react to state changes of the underlying action.
73: */
74: protected PropertyChangeListener createActionPropertyChangeListener(
75: Action a) {
76: return (PropertyChangeListener) Proxy.newProxyInstance(
77: getClass().getClassLoader(),
78: new Class[] { PropertyChangeListener.class },
79: new ButtonStateAdapter(this , super
80: .createActionPropertyChangeListener(a)));
81: }
82:
83: /**
84: * Overridden to initialize selection state according to action
85: */
86: protected void configurePropertiesFromAction(Action a) {
87: super .configurePropertiesFromAction(a);
88: setSelected(((AbstractSelectableAction) a).getState());
89: }
90: }
|