1 19 20 package org.netbeans.bluej.ui.window; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 25 import java.util.ArrayList ; 26 import java.util.Collection ; 27 import java.util.Iterator ; 28 29 import javax.swing.ComboBoxModel ; 30 import javax.swing.DefaultComboBoxModel ; 31 import javax.swing.SwingUtilities ; 32 33 import org.netbeans.api.project.Project; 34 import org.netbeans.api.project.ProjectUtils; 35 import org.netbeans.api.project.ui.OpenProjects; 36 import org.netbeans.bluej.api.BluejLogicalViewProvider; 37 import org.openide.windows.TopComponent; 38 import org.openide.windows.WindowManager; 39 40 45 public class OpenedBluejProjects implements PropertyChangeListener { 46 47 private DefaultComboBoxModel model; 48 private PropChange topComponentChanger; 49 50 private static OpenedBluejProjects instance; 51 52 53 private OpenedBluejProjects() { 54 model = new DefaultComboBoxModel (); 55 topComponentChanger = new PropChange(); 56 } 57 58 public static synchronized OpenedBluejProjects getInstance() { 59 if (instance == null) { 60 instance = new OpenedBluejProjects(); 61 } 62 return instance; 63 } 64 65 public void addNotify() { 66 OpenProjects.getDefault().addPropertyChangeListener(this); 67 doUpdate(false); 68 } 69 70 public void removeNotify() { 71 OpenProjects.getDefault().removePropertyChangeListener(this); 72 } 73 74 public ComboBoxModel getComboModel() { 75 return model; 76 } 77 78 public Project getSelectedProject() { 79 Object sel = model.getSelectedItem(); 80 if (sel != null) { 81 return ((ComboWrapper)sel).getProject(); 82 } 83 return null; 84 } 85 86 87 public void propertyChange(PropertyChangeEvent evt) { 88 if (OpenProjects.PROPERTY_OPEN_PROJECTS.equals(evt.getPropertyName())) { 89 if (SwingUtilities.isEventDispatchThread()) { 90 doUpdate(true); 91 } else { 92 SwingUtilities.invokeLater(new Runnable () { 93 public void run() { 94 doUpdate(true); 95 } 96 }); 97 } 98 } 99 } 100 101 private void doUpdate(boolean trapProjectsView) { 102 Collection existing = new ArrayList (); 103 for (int i = 0; i < model.getSize(); i++) { 104 existing.add(((ComboWrapper)model.getElementAt(i)).getProject()); 105 } 106 Collection newones = new ArrayList (); 107 Project[] prjs = OpenProjects.getDefault().getOpenProjects(); 108 for (int i = 0; i < prjs.length; i++) { 109 if (prjs[i].getLookup().lookup(BluejLogicalViewProvider.class) != null) { 110 if (existing.contains(prjs[i])) { 111 existing.remove(prjs[i]); 112 } else { 113 newones.add(prjs[i]); 114 } 115 } 116 } 117 Iterator it = existing.iterator(); 118 while (it.hasNext()) { 119 Project elem = (Project) it.next(); 120 for (int i = 0; i < model.getSize(); i++) { 121 if (elem == ((ComboWrapper)model.getElementAt(i)).getProject()) { 122 model.removeElementAt(i); 123 break; 124 } 125 } 126 } 127 if (newones.size() > 0) { 128 it = newones.iterator(); 129 ComboWrapper wr = null; 130 while (it.hasNext()) { 131 Project elem = (Project) it.next(); 132 wr = new ComboWrapper(elem); 133 model.addElement(wr); 134 } 135 if (trapProjectsView) { 136 model.setSelectedItem(wr); 137 topComponentChanger.projectWasOpened(); 138 } 139 } 140 if (model.getSelectedItem() == null && model.getSize() > 0) { 141 model.setSelectedItem(model.getElementAt(0)); 142 } 143 if (model.getSize() == 0 && model.getSelectedItem() != null) { 144 model.setSelectedItem(null); 145 } 146 } 147 148 private static class ComboWrapper { 149 private Project project; 150 ComboWrapper(Project proj) { 151 project = proj; 152 } 153 154 public String toString() { 155 return ProjectUtils.getInformation(project).getDisplayName(); 156 } 157 158 public Project getProject() { 159 return project; 160 } 161 162 } 163 164 private static class PropChange implements PropertyChangeListener { 165 private boolean listenerAdded = false; 166 PropChange() { 167 } 168 169 void projectWasOpened() { 170 if (listenerAdded) { 171 return; 172 } 173 listenerAdded = true; 174 assert SwingUtilities.isEventDispatchThread(); 175 TopComponent active = TopComponent.getRegistry().getActivated(); 176 String id = WindowManager.getDefault().findTopComponentID(active); 177 if ("projectTabLogical_tc".equals(id)) { BluejViewTopComponent.findInstance().open(); 179 BluejViewTopComponent.findInstance().requestActive(); 180 } 181 TopComponent.getRegistry().addPropertyChangeListener(this); 182 } 183 184 public void propertyChange(PropertyChangeEvent evt) { 185 if (TopComponent.Registry.PROP_ACTIVATED.equals(evt.getPropertyName())) { 186 TopComponent active = TopComponent.getRegistry().getActivated(); 187 String id = WindowManager.getDefault().findTopComponentID(active); 188 if ("projectTabLogical_tc".equals(id)) { TopComponent.getRegistry().removePropertyChangeListener(this); 190 listenerAdded = false; 191 BluejViewTopComponent.findInstance().open(); 192 BluejViewTopComponent.findInstance().requestActive(); 193 } 194 } 195 } 196 } 197 198 } 199 | Popular Tags |