blob: 2e7f8cb6f676d01b6b307724375f363a1521ac45 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2004-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25package sun.tools.jconsole.inspector;
26
27import java.awt.*;
28import java.awt.dnd.*;
29import java.awt.event.*;
30import java.awt.datatransfer.*;
31import java.io.*;
32import java.util.*;
33import javax.swing.plaf.*;
34import javax.swing.event.*;
35import javax.swing.*;
36
37
38/**
39 * This list implements the drag and drop functionality.
40 */
41@SuppressWarnings("serial")
42public class XTextField extends JPanel
43 implements DocumentListener,
44 ActionListener {
45
46 private static final Color selF = Color.red;
47 private static final Color selB = Color.yellow;
48 private Color fore=null, back=null;
49 private HashMap items = null; //used for popup menu selection
50 private XObject selectedObject;
51 private XObject currentObject;
52 private Class expectedClass;
53 private Object value;
54 protected JTextField textField;
55 private JButton browseObjects;
56
57 private static boolean allowNullSelection = false;
58
59 protected final static int COMPATIBLE_VALUE = 1;
60 protected final static int CURRENT_VALUE = 2;
61 protected final static int NULL_VALUE = 3;
62
63 private JButton button;
64 private XOperations operation;
65
66 //used in XTestFieldEditor
67 public XTextField() {
68 super(new BorderLayout());
69 add(textField = new JTextField(),BorderLayout.CENTER);
70 textField.addActionListener(this);
71 //
72 }
73
74 public XTextField(Object value) {
75 this(value,value.toString().length());
76 }
77
78 public XTextField(Object value, int colWidth) {
79 this(value,value.getClass(),colWidth, true, null, null);
80 }
81
82 public XTextField(Object value,
83 Class expectedClass,
84 int colWidth,
85 boolean isCallable,
86 JButton button,
87 XOperations operation) {
88 super(new BorderLayout());
89 this.expectedClass = expectedClass;
90 this.button = button;
91 this.operation = operation;
92 add(textField = new JTextField(value.toString(),colWidth),
93 BorderLayout.CENTER);
94 if(isCallable)
95 textField.addActionListener(this);
96
97 boolean fieldEditable = Utils.isEditableType(expectedClass.getName());
98 if (fieldEditable && isCallable) {
99 textField.setEditable(true);
100 }
101 else {
102 textField.setEditable(false);
103 }
104 }
105
106 public static void setNullSelectionAllowed(boolean allowNullSelection) {
107 XTextField.allowNullSelection = allowNullSelection;
108 }
109
110 public static boolean getNullSelectionAllowed() {
111 return allowNullSelection;
112 }
113
114 protected void init(Object value, Class expectedClass) {
115 this.expectedClass = expectedClass;
116 this.value = value;
117 boolean fieldEditable = Utils.isEditableType(expectedClass.getName());
118 clearObject();
119 if (value != null) {
120 currentObject = new XObject(value);
121 textField.setText(value.toString());
122 }
123 else {
124 currentObject = XObject.NULL_OBJECT;
125 //null String value for the moment
126 textField.setText("");
127 }
128 textField.setToolTipText(null);
129 if (fieldEditable) {
130 if (!textField.isEditable()) {
131 textField.setEditable(true);
132 }
133
134 }
135 else {
136 if (textField.isEditable()) {
137 textField.setEditable(false);
138 }
139 }
140 }
141
142
143
144
145
146 private synchronized void setObject(XObject object) {
147 clearObject();
148 selectedObject = object;
149 currentObject = object;
150 setSelectedColors();
151 textField.setText(object.getText());
152 textField.getDocument().addDocumentListener(this);
153 paintImmediately(getVisibleRect());
154 }
155
156 private synchronized void clearObject() {
157 textField.getDocument().removeDocumentListener(this);
158 selectedObject = null;
159 currentObject = null;
160 setDefaultColors();
161 }
162
163 private synchronized void setSelectedColors() {
164 // fore = textField.getForeground();
165 // back = textField.getBackground();
166
167 //textField.setForeground(Color.red);
168 // textField.setBackground(Color.yellow);
169 }
170
171 private synchronized void setDefaultColors() {
172 // if (fore != null) textField.setForeground(fore);
173 // if (back != null) textField.setBackground(back);
174 }
175
176 public void setHorizontalAlignment(int h) {
177 textField.setHorizontalAlignment(h);
178 }
179
180 //can be overwritten
181 protected JMenuItem buildJMenuItem(XObject xobject, int valueType) {
182 if (valueType == COMPATIBLE_VALUE) {
183 return new JMenuItem(xobject.getText());
184 }
185 else if (valueType == CURRENT_VALUE) {
186 return new JMenuItem("> "+xobject.getText());
187 }
188 else if (valueType == NULL_VALUE) {
189 return new JMenuItem("null");
190 }
191 else {
192 return null;
193 }
194 }
195
196 private JPopupMenu buildEditPopupMenu() {
197 JPopupMenu menu = new JPopupMenu();
198 return menu;
199 }
200
201
202 // ACTIONLISTENER IMPLEMENTATION
203 public void actionPerformed(ActionEvent e) {
204 if (e.getSource() instanceof JTextField) {
205 if(operation != null)
206 operation.performInvokeRequest(button);
207 }
208 }
209
210 /**
211 * This method returns either the user inputted String, or an XObject
212 * if one was dropped on the input field.
213 */
214 public Object getValue() {
215 if (selectedObject!=null) {
216 if (selectedObject == XObject.NULL_OBJECT) {
217 //null case
218 return null;
219 }
220 else {
221 return selectedObject;
222 }
223 }
224 else {
225 return textField.getText();
226 }
227 }
228
229 public void changedUpdate(DocumentEvent e) {
230 // the user typed something, so remove references
231 // to the obejct that was dropped.
232 clearObject();
233 }
234
235 public void removeUpdate(DocumentEvent e) {
236 // the user typed something, so remove references
237 // to the obejct that was dropped.
238 clearObject();
239 }
240
241 public void insertUpdate(DocumentEvent e) {
242 // the user typed something, so remove references
243 // to the obejct that was dropped.
244 clearObject();
245 }
246
247}