KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > bluej > ui > window > BluejViewTopComponent


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.bluej.ui.window;
20
21 import java.awt.BorderLayout JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.awt.event.ItemEvent JavaDoc;
26 import java.awt.event.ItemListener JavaDoc;
27 import java.beans.PropertyChangeEvent JavaDoc;
28 import java.beans.PropertyChangeListener JavaDoc;
29 import java.io.Serializable JavaDoc;
30 import java.util.Arrays JavaDoc;
31 import javax.swing.ActionMap JavaDoc;
32 import javax.swing.BorderFactory JavaDoc;
33 import javax.swing.DefaultComboBoxModel JavaDoc;
34 import javax.swing.JButton JavaDoc;
35 import javax.swing.JComboBox JavaDoc;
36 import javax.swing.JList JavaDoc;
37 import javax.swing.JPanel JavaDoc;
38 import javax.swing.text.DefaultEditorKit JavaDoc;
39 import org.netbeans.api.project.Project;
40 import org.netbeans.api.project.ui.OpenProjects;
41 import org.netbeans.bluej.api.BluejLogicalViewProvider;
42 import org.openide.ErrorManager;
43 import org.openide.explorer.ExplorerManager;
44 import org.openide.explorer.ExplorerUtils;
45 import org.openide.explorer.view.ListView;
46 import org.openide.nodes.AbstractNode;
47 import org.openide.nodes.Children;
48 import org.openide.nodes.Node;
49 import org.openide.util.Lookup;
50 import org.openide.util.NbBundle;
51 import org.openide.util.Utilities;
52 import org.openide.util.lookup.Lookups;
53 import org.openide.util.lookup.ProxyLookup;
54 import org.openide.windows.TopComponent;
55 import org.openide.windows.WindowManager;
56
57 /**
58  * Top component which displays something.
59  */

60 public final class BluejViewTopComponent extends TopComponent implements ExplorerManager.Provider {
61     
62     private static final long serialVersionUID = 1L;
63     
64     private static BluejViewTopComponent instance;
65     /** path to the icon used by the component and its open action */
66     static final String JavaDoc ICON_PATH = "org/netbeans/bluej/ui/window/bluejview.png"; // NOI18N
67

68     private static final String JavaDoc PREFERRED_ID = "BluejViewTopComponent"; // NOI18N
69
private ListView view;
70     private ExplorerManager manager;
71     
72     private ItemListener JavaDoc itemListener;
73     private LookupProvider lookProvider;
74     
75     private BluejViewTopComponent() {
76         manager = new ExplorerManager();
77         ActionMap JavaDoc map = getActionMap();
78         map.put(DefaultEditorKit.copyAction, ExplorerUtils.actionCopy(manager));
79         map.put(DefaultEditorKit.cutAction, ExplorerUtils.actionCut(manager));
80         map.put(DefaultEditorKit.pasteAction, ExplorerUtils.actionPaste(manager));
81         map.put("delete", ExplorerUtils.actionDelete(manager, true)); // NOI18N
82

83         initComponents();
84         setName(NbBundle.getMessage(BluejViewTopComponent.class, "CTL_BluejViewTopComponent"));
85         setToolTipText(NbBundle.getMessage(BluejViewTopComponent.class, "HINT_BluejViewTopComponent"));
86         setIcon(Utilities.loadImage(ICON_PATH, true));
87         view = new ListView() {
88             protected JList JavaDoc createList() {
89                 JList JavaDoc list = super.createList();
90                 list.setCellRenderer(new HackedNodeRenderer());
91                 return list;
92             }
93         };
94         add(view, BorderLayout.CENTER);
95         lookProvider = new LookupProvider();
96         associateLookup( new ProxyLookup(new Lookup[] {
97             ExplorerUtils.createLookup(manager, map),
98             Lookups.proxy(lookProvider)
99         }));
100         btnUp.addActionListener(new ActionListener JavaDoc() {
101             public void actionPerformed(ActionEvent JavaDoc e) {
102                 Node nd = manager.getExploredContext();
103                 if (nd.getParentNode() != null) {
104                     manager.setExploredContext(nd.getParentNode());
105                 }
106             }
107         });
108         manager.addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
109             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
110                 if (ExplorerManager.PROP_EXPLORED_CONTEXT.equals(evt.getPropertyName())) {
111                     Node cont = manager.getExploredContext();
112                     btnUp.setEnabled(cont != null && cont.getParentNode() != null);
113                 }
114             }
115         });
116         
117         
118         comProject.setEditable(false);
119         comProject.setMinimumSize(new Dimension JavaDoc(150, 22));
120         comProject.setPreferredSize(new Dimension JavaDoc(150, 22));
121         itemListener = new ItemListener JavaDoc() {
122             public void itemStateChanged(ItemEvent JavaDoc e) {
123                 // change main project and selected project in the BJ view
124
if (e.getStateChange() == ItemEvent.SELECTED ||
125                     (e.getStateChange() == ItemEvent.DESELECTED &&
126                      e.getItemSelectable().getSelectedObjects() == null ||
127                      e.getItemSelectable().getSelectedObjects().length == 0)) {
128                     updateContent();
129                 }
130             }
131         };
132     }
133     
134     public ExplorerManager getExplorerManager() {
135         return manager;
136     }
137     
138     private void updateContent() {
139         Project project = OpenedBluejProjects.getInstance().getSelectedProject();
140         if ( project != null && Arrays.asList(OpenProjects.getDefault().getOpenProjects()).contains(project)) {
141             // if it's not in the list of opened projects we probably are closing multiple projects as once (or shutting down)
142
lookProvider.setLookup(Lookups.singleton(project));
143             OpenProjects.getDefault().setMainProject(project);
144             BluejLogicalViewProvider provider = (BluejLogicalViewProvider) project.getLookup().lookup(BluejLogicalViewProvider.class);
145             manager.setRootContext(provider.getBigIconRootNode());
146             Project np = (Project)getLookup().lookup(Project.class);
147         } else {
148             lookProvider.setLookup(Lookup.EMPTY);
149             manager.setRootContext(new AbstractNode(Children.LEAF));
150             getLookup().lookup(Project.class);
151         }
152     }
153     
154     /** This method is called from within the constructor to
155      * initialize the form.
156      * WARNING: Do NOT modify this code. The content of this method is
157      * always regenerated by the Form Editor.
158      */

159     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
160
private void initComponents() {
161         pnlToolbar = new javax.swing.JPanel JavaDoc();
162         lblProject = new javax.swing.JLabel JavaDoc();
163         comProject = new javax.swing.JComboBox JavaDoc();
164         btnUp = new javax.swing.JButton JavaDoc();
165
166         setLayout(new java.awt.BorderLayout JavaDoc());
167
168         pnlToolbar.setMinimumSize(new java.awt.Dimension JavaDoc(200, 10));
169         lblProject.setLabelFor(comProject);
170         org.openide.awt.Mnemonics.setLocalizedText(lblProject, org.openide.util.NbBundle.getMessage(BluejViewTopComponent.class, "lblProject.text"));
171
172         org.openide.awt.Mnemonics.setLocalizedText(btnUp, org.openide.util.NbBundle.getMessage(BluejViewTopComponent.class, "btnUp.label"));
173
174         org.jdesktop.layout.GroupLayout pnlToolbarLayout = new org.jdesktop.layout.GroupLayout(pnlToolbar);
175         pnlToolbar.setLayout(pnlToolbarLayout);
176         pnlToolbarLayout.setHorizontalGroup(
177             pnlToolbarLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
178             .add(pnlToolbarLayout.createSequentialGroup()
179                 .addContainerGap()
180                 .add(lblProject)
181                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
182                 .add(comProject, 0, 219, Short.MAX_VALUE)
183                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
184                 .add(btnUp)
185                 .addContainerGap())
186         );
187         pnlToolbarLayout.setVerticalGroup(
188             pnlToolbarLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
189             .add(pnlToolbarLayout.createSequentialGroup()
190                 .add(6, 6, 6)
191                 .add(pnlToolbarLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
192                     .add(lblProject)
193                     .add(btnUp)
194                     .add(comProject, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
195         );
196         add(pnlToolbar, java.awt.BorderLayout.NORTH);
197
198     }// </editor-fold>//GEN-END:initComponents
199

200     
201     // Variables declaration - do not modify//GEN-BEGIN:variables
202
private javax.swing.JButton JavaDoc btnUp;
203     private javax.swing.JComboBox JavaDoc comProject;
204     private javax.swing.JLabel JavaDoc lblProject;
205     private javax.swing.JPanel JavaDoc pnlToolbar;
206     // End of variables declaration//GEN-END:variables
207

208     /**
209      * Gets default instance. Do not use directly: reserved for *.settings files only,
210      * i.e. deserialization routines; otherwise you could get a non-deserialized instance.
211      * To obtain the singleton instance, use {@link findInstance}.
212      */

213     public static synchronized BluejViewTopComponent getDefault() {
214         if (instance == null) {
215             instance = new BluejViewTopComponent();
216         }
217         return instance;
218     }
219     
220     /**
221      * Obtain the BluejViewTopComponent instance. Never call {@link #getDefault} directly!
222      */

223     public static synchronized BluejViewTopComponent findInstance() {
224         TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID);
225         if (win == null) {
226             ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find BluejView component. It will not be located properly in the window system."); // NOI18N
227
return getDefault();
228         }
229         if (win instanceof BluejViewTopComponent) {
230             return (BluejViewTopComponent)win;
231         }
232         ErrorManager.getDefault().log(ErrorManager.WARNING, "There seem to be multiple components with the '" + PREFERRED_ID + "' ID. That is a potential source of errors and unexpected behavior."); // NOI18N
233
return getDefault();
234     }
235     
236     public int getPersistenceType() {
237         return TopComponent.PERSISTENCE_ALWAYS;
238     }
239     
240     public void componentOpened() {
241         comProject.setModel(OpenedBluejProjects.getInstance().getComboModel());
242         updateContent();
243         comProject.addItemListener(itemListener);
244     }
245     
246     public void componentClosed() {
247         comProject.removeItemListener(itemListener);
248         comProject.setModel(new DefaultComboBoxModel JavaDoc());
249     }
250     
251     /** replaces this in object stream */
252     public Object JavaDoc writeReplace() {
253         return new ResolvableHelper();
254     }
255     
256     protected String JavaDoc preferredID() {
257         return PREFERRED_ID;
258     }
259     
260     final static class ResolvableHelper implements Serializable JavaDoc {
261         private static final long serialVersionUID = 1L;
262         public Object JavaDoc readResolve() {
263             return BluejViewTopComponent.getDefault();
264         }
265     }
266
267     final static class LookupProvider implements Lookup.Provider {
268
269         private Lookup lookup;
270
271         public void setLookup(Lookup lkp) {
272             lookup = lkp;
273         }
274         public Lookup getLookup() {
275             return lookup == null ? Lookup.EMPTY : lookup;
276         }
277
278     }
279 }
280
Popular Tags