xref: /onnv-gate/usr/src/cmd/print/printmgr/com/sun/admin/pm/client/pmButton.java (revision 2141:8b55f69b9419)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  *
23  * ident	"%Z%%M%	%I%	%E% SMI"
24  *
25  * Copyright (c) 1999 by Sun Microsystems, Inc.
26  * All rights reserved.
27  *
28  * pmButton.java
29  *
30  */
31 
32 package com.sun.admin.pm.client;
33 
34 import java.util.*;
35 import java.awt.*;
36 import java.awt.event.*;
37 import javax.swing.*;
38 
39 import com.sun.admin.pm.server.*;
40 
41 /*
42  * strategy:
43  * Keep a hashtable of root panes and their associated default buttons.
44  * Note that there is at present no way to remove a root pane entry
45  * from the table...
46  *
47  * Ideally there should be an interface to allow objects to
48  * remove themselves before disappearing.
49  */
50 
51 public class pmButton extends JButton {
52 
53     // static JButton defaultButton = null;
54 
55     // map root panes to their true default buttons
56     static Hashtable map = new Hashtable();
57 
getHashtable()58     public static Hashtable getHashtable() {
59         return map;
60     }
61 
62     /*
63      * make this button the default on this root pane
64      * retunrs true if success, false o/w
65      */
makeDefaultButton()66     boolean makeDefaultButton() {
67         return makeDefaultButton(this);
68     }
69 
70     /*
71      * make b the default on this root pane
72      * returns true if success, false otherwise
73      */
makeDefaultButton(JButton b)74     boolean makeDefaultButton(JButton b) {
75         JRootPane r = this.getRootPane();
76 
77         if (r == null) {
78             Debug.info("BUTTON:  null root panel");
79             return false;
80         }
81 
82         if (b == null) {
83             Debug.info("BUTTON:  makeDefaultButton null on " + r);
84         }
85 
86         /*
87          * Debug.info("\nBUTTON:  makeDefaultButton " +
88          *	(b == null ? "null" : b.getText()) +
89          *		" on " + r + "\n");
90          */
91 
92         if (b != null && b.isDefaultCapable() == false) {
93             Debug.info("BUTTON:  false isDefaultCapable on " + r);
94             return false;
95         }
96 
97         // unfocus the old default, if it's different
98         JButton oldb;
99         if ((oldb = r.getDefaultButton()) != null && oldb != b) {
100             oldb.setFocusPainted(false);
101         }
102 
103         /*
104          * Debug.info("\nBUTTON:  makeDefaultButton: old button was " +
105          *	(oldb == null ? "null" : oldb.getText()) + "\n");
106          */
107 
108         r.setDefaultButton(b);
109 
110         return true;
111     }
112 
113 
pmButton(String s)114     public pmButton(String s) {
115         super(s);
116 
117         this.addFocusListener(new FocusAdapter() {
118 
119             // upon gaining focus: make this the root pane's default
120             public void focusGained(FocusEvent e) {
121                 if (e.isTemporary()) {
122                     /*
123                      * Debug.info("BUTTON:  " + getText() +
124                      *		" gained temp - ignoring");
125                      */
126                     return;
127                 }
128 
129                 Debug.info("BUTTON:  " + getText() + " gained");
130 
131                 if (makeDefaultButton())
132                     setFocusPainted(true);
133 
134             }
135 
136             // upon losing focus: make 'true' default the default
137             public void focusLost(FocusEvent e) {
138                 if (e.isTemporary()) {
139                     /*
140                      * Debug.info("BUTTON:  " + getText() +
141                      *		" lost temp - ignoring");
142                      */
143                     return;
144                 }
145 
146                 Debug.info("BUTTON:  " + getText() + " lost");
147 
148                 /*
149                  * i thought it might make sense to test for the
150                  * next focusable comp, but what if focus is being
151                  * lost as the result of a mouse click??
152                  */
153 
154                 makeDefaultButton((JButton) map.get(getRootPane()));
155                 // setFocusPainted(false);
156             }
157 
158         });
159     }
160 
161     // make this the true default for this root pane
setAsDefaultButton()162     void setAsDefaultButton() {
163         setAsDefaultButton(this);
164     }
165 
166     // make b the true default for this root pane
setAsDefaultButton(JButton b)167     void setAsDefaultButton(JButton b) {
168         JRootPane r = getRootPane();
169 
170         /*
171          * Debug.message("BUTTON:  setAsDefaultButton " +
172          *	(b == null ? "null" : b.getText()) +
173          *			" root = " + r);
174          */
175 
176         // setting default to null removes state
177         if (b == null)
178             map.remove(r);
179         else
180             map.put(r, b);	// creates a new entry if needed
181         makeDefaultButton(b);
182     }
183 
184 
185     // clean up component about to be removed
unreference()186     void unreference() {
187         JRootPane r = getRootPane();
188         map.remove(r);
189     }
190 
unreference(JComponent c)191     public static void unreference(JComponent c) {
192         JRootPane r = c.getRootPane();
193         map.remove(r);
194     }
195 
unreference(JRootPane r)196     public static void unreference(JRootPane r) {
197         map.remove(r);
198     }
199 
200 
201     static boolean enableMnemonics = false;
202 
setEnableMnemonics(boolean m)203     static void setEnableMnemonics(boolean m) {
204         enableMnemonics = m;
205     }
206 
setMnemonic(int mnemonic)207     public void setMnemonic(int mnemonic) {
208         setMnemonic((char)mnemonic);
209     }
210 
setMnemonic(char mnemonic)211     public void setMnemonic(char mnemonic) {
212         if (enableMnemonics)
213             super.setMnemonic(mnemonic);
214     }
215 
216 }
217