Source code: com/virtuosotechnologies/lib/basiccommand/builder/AbstractSwingButtonBuilderNode.java
1 /*
2 ================================================================================
3
4 FILE: AbstractSwingButtonBuilderNode.java
5
6 PROJECT:
7
8 Virtuoso Utilities
9
10 CONTENTS:
11
12 A builder that creates a swing button.
13
14 PROGRAMMERS:
15
16 Daniel Azuma (DA) <dazuma@kagi.com>
17
18 COPYRIGHT:
19
20 Copyright (C) 2003 Daniel Azuma (dazuma@kagi.com)
21
22 This program is free software; you can redistribute it and/or
23 modify it under the terms of the GNU General Public License as
24 published by the Free Software Foundation; either version 2
25 of the License, or (at your option) any later version.
26
27 This program is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 GNU General Public License for more details.
31
32 You should have received a copy of the GNU General Public
33 License along with this program; if not, write to
34 Free Software Foundation, Inc.
35 59 Temple Place, Suite 330
36 Boston, MA 02111-1307 USA
37
38 ================================================================================
39 */
40
41
42 package com.virtuosotechnologies.lib.basiccommand.builder;
43
44 import com.virtuosotechnologies.lib.basiccommand.BasicCommandNode;
45 import com.virtuosotechnologies.lib.command.CommandNode;
46 import com.virtuosotechnologies.lib.command.AbstractCommandNode;
47 import com.virtuosotechnologies.lib.propertyset.PropertySetEvent;
48
49
50 import javax.swing.AbstractButton;
51 import java.awt.event.ItemListener;
52 import java.awt.event.ItemEvent;
53 import java.awt.event.ActionListener;
54 import java.awt.event.ActionEvent;
55
56
57 /**
58 * A builder that creates a swing button.
59 * This needs to be subclassed to implement createInitialElement(), and/or
60 * to pass a button into the constructor.
61 */
62 public abstract class AbstractSwingButtonBuilderNode
63 extends AbstractElementBuilderNode
64 {
65 private SwingButtonUpdater updater_;
66
67
68 /**
69 * Constructor
70 */
71 protected AbstractSwingButtonBuilderNode(
72 CommandNode commandNode,
73 AbstractBranchBuilderNode parent,
74 int index)
75 {
76 this(commandNode, parent, index, null);
77 }
78
79
80 /**
81 * Constructor
82 */
83 protected AbstractSwingButtonBuilderNode(
84 CommandNode commandNode,
85 AbstractBranchBuilderNode parent,
86 int index,
87 AbstractButton item)
88 {
89 super(commandNode, parent, index, item);
90 item = (AbstractButton)getElement();
91 updater_ = new SwingButtonUpdater(item);
92 updater_.updateAll(commandNode);
93 item.addItemListener(
94 new ItemListener()
95 {
96 public void itemStateChanged(
97 ItemEvent ev)
98 {
99 Object newState =
100 (ev.getStateChange() == ItemEvent.SELECTED) ?
101 Boolean.TRUE : Boolean.FALSE;
102 getCommandNode().putValue(BasicCommandNode.SELECTION_STATE_PROPERTY, newState);
103 }
104 });
105 item.addActionListener(
106 new ActionListener()
107 {
108 public void actionPerformed(
109 ActionEvent ev)
110 {
111 AbstractCommandNode.invoke(getCommandNode());
112 }
113 });
114 }
115
116
117 /**
118 * Model changed
119 */
120 public void propertySetChanged(
121 PropertySetEvent ev)
122 {
123 updater_.updateIncremental(ev);
124 super.propertySetChanged(ev);
125 }
126 }