001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.form.wizard;
043:
044: import java.util.*;
045: import java.beans.EventSetDescriptor;
046: import javax.swing.tree.*;
047: import javax.swing.event.*;
048:
049: import org.openide.util.NbBundle;
050: import org.netbeans.modules.form.*;
051:
052: /**
053: * The UI component of the ConnectionWizardPanel1.
054: *
055: * @author Tomas Pavek
056: */
057:
058: class ConnectionPanel1 extends javax.swing.JPanel {
059:
060: private ConnectionWizardPanel1 wizardPanel;
061:
062: /** Creates new form ConnectionPanel1 */
063: ConnectionPanel1(ConnectionWizardPanel1 wizardPanel) {
064: this .wizardPanel = wizardPanel;
065:
066: initComponents();
067:
068: RADComponent source = wizardPanel.getSourceComponent();
069:
070: java.util.ResourceBundle bundle = NbBundle
071: .getBundle(ConnectionPanel1.class);
072:
073: setName(bundle.getString("CTL_CW_Step1_Title")); // NOI18N
074: sourceComponentName.setText(source.getName());
075:
076: eventNameCombo
077: .setEnabled(wizardPanel.getSelectedEvent() != null);
078:
079: eventNameCombo
080: .addActionListener(new java.awt.event.ActionListener() {
081: public void actionPerformed(
082: java.awt.event.ActionEvent e) {
083: ConnectionPanel1.this .wizardPanel
084: .fireStateChanged();
085: }
086: });
087:
088: eventNameCombo.getEditor().addActionListener(
089: new java.awt.event.ActionListener() {
090: public void actionPerformed(
091: java.awt.event.ActionEvent e) {
092: ConnectionPanel1.this .wizardPanel
093: .fireStateChanged();
094: }
095: });
096:
097: // populate event tree
098: final Vector eventNodes = new Vector();
099: TreeNode rootNode = new TreeNode() {
100: public TreeNode getChildAt(int childIndex) {
101: return (TreeNode) eventNodes.elementAt(childIndex);
102: }
103:
104: public int getChildCount() {
105: return eventNodes.size();
106: }
107:
108: public TreeNode getParent() {
109: return null;
110: }
111:
112: public int getIndex(TreeNode node) {
113: return eventNodes.indexOf(node);
114: }
115:
116: public boolean getAllowsChildren() {
117: return true;
118: }
119:
120: public boolean isLeaf() {
121: return false;
122: }
123:
124: public Enumeration children() {
125: return eventNodes.elements();
126: }
127: };
128:
129: EventSetDescriptor lastEventSetDesc = null;
130: TreeNode eventSetNode = null;
131: List eventSetEvents = null;
132:
133: Event[] events = source.getAllEvents();
134: for (int i = 0; i < events.length; i++) {
135: Event event = events[i];
136: EventSetDescriptor eventSetDesc = event
137: .getEventSetDescriptor();
138:
139: if (eventSetDesc != lastEventSetDesc) {
140: eventSetEvents = new ArrayList();
141: eventSetNode = new EventSetNode(rootNode, eventSetDesc
142: .getName(), eventSetEvents);
143: eventNodes.add(eventSetNode);
144: lastEventSetDesc = eventSetDesc;
145: }
146:
147: eventSetEvents.add(new EventNode(eventSetNode, event));
148: }
149:
150: DefaultTreeSelectionModel treeSelectionModel = new DefaultTreeSelectionModel();
151: treeSelectionModel
152: .addTreeSelectionListener(new TreeSelectionListener() {
153: public void valueChanged(TreeSelectionEvent evt) {
154: TreePath[] paths = eventSelectTree
155: .getSelectionPaths();
156: if ((paths != null) && (paths.length == 1)) {
157: TreeNode node = (TreeNode) paths[0]
158: .getLastPathComponent();
159: if ((node != null)
160: && (node instanceof EventNode)) {
161: setSelectedEvent(((EventNode) node)
162: .getEvent());
163: return;
164: }
165: }
166: setSelectedEvent(null);
167: }
168: });
169:
170: treeSelectionModel
171: .setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
172: eventSelectTree.setModel(new DefaultTreeModel(rootNode));
173: eventSelectTree.setSelectionModel(treeSelectionModel);
174:
175: // localization code
176: sourceNameLabel.setText(bundle
177: .getString("CTL_CW_SourceComponent")); // NOI18N
178: sourceNameLabel.setDisplayedMnemonic(bundle.getString(
179: "CTL_CW_SourceComponent_Mnemonic").charAt(0)); // NOI18N
180: sourceComponentName.setToolTipText(bundle
181: .getString("CTL_CW_SourceComponent_Hint")); // NOI18N
182: eventSelectLabel.setText(bundle.getString("CTL_CW_Event")); // NOI18N
183: eventSelectLabel.setDisplayedMnemonic(bundle.getString(
184: "CTL_CW_Event_Mnemonic").charAt(0)); // NOI18N
185: eventSelectTree.setToolTipText(bundle
186: .getString("CTL_CW_Event_Hint"));
187: sourcePanel.setToolTipText(bundle
188: .getString("CTL_CW_Event_Hint"));
189: eventHandlerPanel
190: .setBorder(new javax.swing.border.CompoundBorder(
191: new javax.swing.border.TitledBorder(
192: new javax.swing.border.EtchedBorder(),
193: bundle
194: .getString("CTL_CW_EventHandlerMethod")), // NOI18N
195: new javax.swing.border.EmptyBorder(
196: new java.awt.Insets(5, 5, 5, 5))));
197: eventNameLabel.setText(bundle.getString("CTL_CW_MethodName")); // NOI18N
198: eventNameLabel.setDisplayedMnemonic(bundle.getString(
199: "CTL_CW_MethodName_Mnemonic").charAt(0)); // NOI18N
200:
201: eventSelectTree.getAccessibleContext()
202: .setAccessibleDescription(
203: bundle.getString("ACSD_CW_EventTree")); // NOI18N
204: eventNameCombo.getAccessibleContext().setAccessibleDescription(
205: bundle.getString("ACSD_CW_MethodName")); // NOI18N
206: sourceComponentName.getAccessibleContext()
207: .setAccessibleDescription(
208: bundle.getString("ACSD_CW_SourceComponent")); // NOI18N
209: getAccessibleContext().setAccessibleDescription(
210: bundle.getString("ACSD_CW_ConnectionPanel1")); // NOI18N
211: putClientProperty("WizardPanel_contentSelectedIndex",
212: new Integer(0)); // NOI18N
213: }
214:
215: public java.awt.Dimension getPreferredSize() {
216: return new java.awt.Dimension(450, 300);
217: }
218:
219: String getEventName() {
220: return (String) eventNameCombo.getEditor().getItem();
221: }
222:
223: private void setSelectedEvent(Event event) {
224: eventNameCombo.removeAllItems();
225:
226: if (event != null) {
227: eventNameCombo.setEnabled(true);
228:
229: FormEvents formEvents = wizardPanel.getSourceComponent()
230: .getFormModel().getFormEvents();
231: String defaultName = formEvents.findFreeHandlerName(event,
232: wizardPanel.getSourceComponent());
233:
234: eventNameCombo.addItem(defaultName);
235:
236: if (event.hasEventHandlers()) {
237: String[] handlers = event.getEventHandlers();
238: for (int i = 0; i < handlers.length; i++)
239: eventNameCombo.addItem(handlers[i]);
240: }
241:
242: eventNameCombo.setSelectedIndex(0);
243: } else
244: eventNameCombo.setEnabled(false);
245:
246: wizardPanel.setSelectedEvent(event);
247: }
248:
249: /** This method is called from within the constructor to
250: * initialize the form.
251: * WARNING: Do NOT modify this code. The content of this method is
252: * always regenerated by the Form Editor.
253: */
254: private void initComponents() {//GEN-BEGIN:initComponents
255: sourcePanel = new javax.swing.JPanel();
256: sourceInfoPanel = new javax.swing.JPanel();
257: sourceNamePanel = new javax.swing.JPanel();
258: sourceNameLabel = new javax.swing.JLabel();
259: sourceComponentName = new javax.swing.JTextField();
260: eventSelectLabelPanel = new javax.swing.JPanel();
261: eventSelectLabel = new javax.swing.JLabel();
262: eventSelectScroll = new javax.swing.JScrollPane();
263: eventSelectTree = new javax.swing.JTree();
264: eventHandlerPanel = new javax.swing.JPanel();
265: eventNameLabel = new javax.swing.JLabel();
266: eventNameCombo = new javax.swing.JComboBox();
267:
268: setLayout(new java.awt.BorderLayout(0, 11));
269:
270: sourcePanel.setLayout(new java.awt.BorderLayout());
271:
272: sourceInfoPanel.setLayout(new java.awt.GridLayout(2, 1));
273:
274: sourceNamePanel.setLayout(new java.awt.FlowLayout(
275: java.awt.FlowLayout.LEFT, 0, 0));
276:
277: sourceNameLabel.setLabelFor(sourceComponentName);
278: sourceNameLabel.setText("Source Component:");
279: sourceNameLabel.setBorder(new javax.swing.border.EmptyBorder(
280: new java.awt.Insets(0, 0, 0, 6)));
281: sourceNamePanel.add(sourceNameLabel);
282:
283: sourceComponentName.setEditable(false);
284: sourceComponentName.setText("jTextField1");
285: sourceNamePanel.add(sourceComponentName);
286:
287: sourceInfoPanel.add(sourceNamePanel);
288:
289: eventSelectLabelPanel.setLayout(new java.awt.FlowLayout(
290: java.awt.FlowLayout.LEFT, 0, 3));
291:
292: eventSelectLabel.setLabelFor(eventSelectTree);
293: eventSelectLabel.setText("Events");
294: eventSelectLabelPanel.add(eventSelectLabel);
295:
296: sourceInfoPanel.add(eventSelectLabelPanel);
297:
298: sourcePanel.add(sourceInfoPanel, java.awt.BorderLayout.NORTH);
299:
300: eventSelectScroll.setMaximumSize(new java.awt.Dimension(32767,
301: 100));
302: eventSelectTree.setRootVisible(false);
303: eventSelectTree.setShowsRootHandles(true);
304: eventSelectScroll.setViewportView(eventSelectTree);
305:
306: sourcePanel
307: .add(eventSelectScroll, java.awt.BorderLayout.CENTER);
308:
309: add(sourcePanel, java.awt.BorderLayout.CENTER);
310:
311: eventHandlerPanel.setLayout(new java.awt.BorderLayout(8, 0));
312:
313: eventHandlerPanel
314: .setBorder(new javax.swing.border.TitledBorder(
315: "Event Handler Method"));
316: eventNameLabel.setLabelFor(eventNameCombo);
317: eventNameLabel.setText("Method Name:");
318: eventHandlerPanel.add(eventNameLabel,
319: java.awt.BorderLayout.WEST);
320:
321: eventNameCombo.setEditable(true);
322: eventHandlerPanel.add(eventNameCombo,
323: java.awt.BorderLayout.CENTER);
324:
325: add(eventHandlerPanel, java.awt.BorderLayout.SOUTH);
326:
327: }//GEN-END:initComponents
328:
329: // Variables declaration - do not modify//GEN-BEGIN:variables
330: private javax.swing.JTree eventSelectTree;
331: private javax.swing.JLabel eventNameLabel;
332: private javax.swing.JPanel sourcePanel;
333: private javax.swing.JScrollPane eventSelectScroll;
334: private javax.swing.JLabel eventSelectLabel;
335: private javax.swing.JPanel sourceNamePanel;
336: private javax.swing.JPanel sourceInfoPanel;
337: private javax.swing.JPanel eventHandlerPanel;
338: private javax.swing.JLabel sourceNameLabel;
339: private javax.swing.JTextField sourceComponentName;
340: private javax.swing.JComboBox eventNameCombo;
341: private javax.swing.JPanel eventSelectLabelPanel;
342:
343: // End of variables declaration//GEN-END:variables
344:
345: // --------
346: // Innerclasses
347:
348: class EventSetNode implements TreeNode {
349: private TreeNode parent;
350: private String eventSetName;
351: private List subNodes;
352:
353: public EventSetNode(TreeNode parent, String eventSetName,
354: List subNodes) {
355: this .parent = parent;
356: this .eventSetName = eventSetName;
357: this .subNodes = subNodes;
358: }
359:
360: public TreeNode getChildAt(int childIndex) {
361: return (TreeNode) subNodes.get(childIndex);
362: }
363:
364: public int getChildCount() {
365: return subNodes.size();
366: }
367:
368: public TreeNode getParent() {
369: return null;
370: }
371:
372: public int getIndex(TreeNode node) {
373: return subNodes.indexOf(node);
374: }
375:
376: public boolean getAllowsChildren() {
377: return true;
378: }
379:
380: public boolean isLeaf() {
381: return false;
382: }
383:
384: public Enumeration children() {
385: return Collections.enumeration(subNodes);
386: }
387:
388: public String toString() {
389: return eventSetName;
390: }
391: }
392:
393: class EventNode implements TreeNode {
394: private TreeNode parent;
395: private Event event;
396:
397: public EventNode(TreeNode parent, Event event) {
398: this .parent = parent;
399: this .event = event;
400: }
401:
402: public TreeNode getChildAt(int childIndex) {
403: return null;
404: }
405:
406: public int getChildCount() {
407: return 0;
408: }
409:
410: public TreeNode getParent() {
411: return parent;
412: }
413:
414: public int getIndex(TreeNode node) {
415: return -1;
416: }
417:
418: public boolean getAllowsChildren() {
419: return false;
420: }
421:
422: public boolean isLeaf() {
423: return true;
424: }
425:
426: public Enumeration children() {
427: return null;
428: }
429:
430: public String toString() {
431: if (!event.hasEventHandlers())
432: return event.getName();
433: String[] handlers = event.getEventHandlers();
434: if (handlers.length == 1)
435: return event.getName() + " [" + handlers[0] + "]"; // NOI18N
436: return event.getName() + " [...]"; // NOI18N
437: }
438:
439: Event getEvent() {
440: return event;
441: }
442: }
443: }
|