Lines 75-80
Link Here
|
75 |
import org.netbeans.api.debugger.Session; |
75 |
import org.netbeans.api.debugger.Session; |
76 |
import org.netbeans.spi.debugger.ContextProvider; |
76 |
import org.netbeans.spi.debugger.ContextProvider; |
77 |
import org.netbeans.spi.debugger.SessionProvider; |
77 |
import org.netbeans.spi.debugger.SessionProvider; |
|
|
78 |
import org.netbeans.spi.debugger.ui.ViewLifecycle.ModelUpdateListener; |
78 |
import org.netbeans.spi.viewmodel.AsynchronousModelFilter; |
79 |
import org.netbeans.spi.viewmodel.AsynchronousModelFilter; |
79 |
import org.netbeans.spi.viewmodel.CheckNodeModel; |
80 |
import org.netbeans.spi.viewmodel.CheckNodeModel; |
80 |
import org.netbeans.spi.viewmodel.CheckNodeModelFilter; |
81 |
import org.netbeans.spi.viewmodel.CheckNodeModelFilter; |
Lines 169-174
Link Here
|
169 |
private Preferences viewPreferences; |
170 |
private Preferences viewPreferences; |
170 |
private MessageFormat viewTreeDisplayFormat; |
171 |
private MessageFormat viewTreeDisplayFormat; |
171 |
private ViewPreferenceChangeListener prefListener = new ViewPreferenceChangeListener(); |
172 |
private ViewPreferenceChangeListener prefListener = new ViewPreferenceChangeListener(); |
|
|
173 |
|
174 |
private ModelUpdateListener mul; |
172 |
|
175 |
|
173 |
private static final RequestProcessor RP = new RequestProcessor(ViewModelListener.class.getName(), 1); |
176 |
private static final RequestProcessor RP = new RequestProcessor(ViewModelListener.class.getName(), 1); |
174 |
|
177 |
|
Lines 190-200
Link Here
|
190 |
buttonsPane.setLayout(new GridBagLayout()); |
193 |
buttonsPane.setLayout(new GridBagLayout()); |
191 |
this.propertiesHelpID = propertiesHelpID; |
194 |
this.propertiesHelpID = propertiesHelpID; |
192 |
this.viewIcon = viewIcon; |
195 |
this.viewIcon = viewIcon; |
193 |
viewPreferences = NbPreferences.forModule(ContextProvider.class).node(VIEW_PREFERENCES_NAME).node(viewType); |
196 |
initView(); |
194 |
setUp(); |
197 |
setUp(); |
195 |
} |
198 |
} |
196 |
// </RAVE> |
199 |
// </RAVE> |
197 |
|
200 |
|
|
|
201 |
ViewModelListener(String viewType, String propertiesHelpID, ModelUpdateListener mul) { |
202 |
this.viewType = viewType; |
203 |
this.propertiesHelpID = propertiesHelpID; |
204 |
this.mul = mul; |
205 |
setUp(); |
206 |
} |
207 |
|
208 |
private void initView() { |
209 |
// To have reasonable preferred size |
210 |
view.add(Models.createView(Models.EMPTY_MODEL)); |
211 |
} |
212 |
|
198 |
void setUp() { |
213 |
void setUp() { |
199 |
if (SwingUtilities.isEventDispatchThread()) { |
214 |
if (SwingUtilities.isEventDispatchThread()) { |
200 |
RP.post(new Runnable() { |
215 |
RP.post(new Runnable() { |
Lines 204-209
Link Here
|
204 |
}); |
219 |
}); |
205 |
return ; |
220 |
return ; |
206 |
} |
221 |
} |
|
|
222 |
viewPreferences = NbPreferences.forModule(ContextProvider.class).node(VIEW_PREFERENCES_NAME).node(viewType); |
207 |
DebuggerManager.getDebuggerManager ().addDebuggerListener ( |
223 |
DebuggerManager.getDebuggerManager ().addDebuggerListener ( |
208 |
DebuggerManager.PROP_CURRENT_ENGINE, |
224 |
DebuggerManager.PROP_CURRENT_ENGINE, |
209 |
this |
225 |
this |
Lines 217-223
Link Here
|
217 |
updateModelLazily (); |
233 |
updateModelLazily (); |
218 |
} |
234 |
} |
219 |
|
235 |
|
220 |
void destroy () { |
236 |
public void destroy () { |
221 |
if (SwingUtilities.isEventDispatchThread()) { |
237 |
if (SwingUtilities.isEventDispatchThread()) { |
222 |
RP.post(new Runnable() { |
238 |
RP.post(new Runnable() { |
223 |
@Override public void run() { |
239 |
@Override public void run() { |
Lines 255-261
Link Here
|
255 |
} |
271 |
} |
256 |
} |
272 |
} |
257 |
final boolean haveModels = haveTreeModels || haveNodeModels || tableModels != null && tableModels.size() > 0; |
273 |
final boolean haveModels = haveTreeModels || haveNodeModels || tableModels != null && tableModels.size() > 0; |
258 |
if (haveModels && view.getComponentCount() > 0) { |
274 |
if (haveModels && view != null && view.getComponentCount() > 0) { |
259 |
JComponent tree = (JComponent) view.getComponent(0); |
275 |
JComponent tree = (JComponent) view.getComponent(0); |
260 |
if (!(tree instanceof javax.swing.JTabbedPane)) { |
276 |
if (!(tree instanceof javax.swing.JTabbedPane)) { |
261 |
Models.setModelsToView(tree, null); |
277 |
Models.setModelsToView(tree, null); |
Lines 281-302
Link Here
|
281 |
currentSession = null; |
297 |
currentSession = null; |
282 |
providerToDisplay = null; |
298 |
providerToDisplay = null; |
283 |
buttons = null; |
299 |
buttons = null; |
284 |
SwingUtilities.invokeLater(new Runnable() { |
300 |
if (view != null) { |
285 |
@Override |
301 |
SwingUtilities.invokeLater(new Runnable() { |
286 |
public void run() { |
302 |
@Override |
287 |
// Have to access UI in AWT |
303 |
public void run() { |
288 |
synchronized (destroyLock) { |
304 |
// Have to access UI in AWT |
289 |
if (buttons == null) { // Still destroyed. Might be re-created in between. |
305 |
synchronized (destroyLock) { |
290 |
buttonsPane.removeAll(); |
306 |
if (buttons == null) { // Still destroyed. Might be re-created in between. |
291 |
view.removeAll(); |
307 |
buttonsPane.removeAll(); |
|
|
308 |
view.removeAll(); |
309 |
} |
292 |
} |
310 |
} |
293 |
} |
311 |
} |
294 |
} |
312 |
}); |
295 |
}); |
313 |
} |
296 |
sls = new ArrayList<ViewModelListener>(subListeners); |
314 |
sls = new ArrayList<ViewModelListener>(subListeners); |
297 |
subListeners.clear(); |
315 |
subListeners.clear(); |
298 |
isUp = false; |
316 |
isUp = false; |
299 |
} |
317 |
} |
|
|
318 |
mul = null; |
300 |
} |
319 |
} |
301 |
for (ViewModelListener l : sls) { |
320 |
for (ViewModelListener l : sls) { |
302 |
l.destroy(); |
321 |
l.destroy(); |
Lines 463-469
Link Here
|
463 |
buttons = theButtons; |
482 |
buttons = theButtons; |
464 |
tabbedPane = cp.lookupFirst(viewPath, javax.swing.JTabbedPane.class); |
483 |
tabbedPane = cp.lookupFirst(viewPath, javax.swing.JTabbedPane.class); |
465 |
|
484 |
|
466 |
ModelsChangeRefresher mcr = new ModelsChangeRefresher(); |
485 |
ModelsChangeRefresher mcr = new ModelsChangeRefresher(e); |
467 |
Customizer[] modelListCustomizers = new Customizer[] { |
486 |
Customizer[] modelListCustomizers = new Customizer[] { |
468 |
//(Customizer) treeModels, |
487 |
//(Customizer) treeModels, |
469 |
//(Customizer) treeModelFilters, |
488 |
//(Customizer) treeModelFilters, |
Lines 496-502
Link Here
|
496 |
} |
515 |
} |
497 |
} |
516 |
} |
498 |
|
517 |
|
499 |
refreshModel(); |
518 |
refreshModel(e); |
500 |
} |
519 |
} |
501 |
|
520 |
|
502 |
private static void addAsCustomizers(List<Customizer> modelListCustomizerLists, Object[] modelLists) { |
521 |
private static void addAsCustomizers(List<Customizer> modelListCustomizerLists, Object[] modelLists) { |
Lines 519-525
Link Here
|
519 |
return models; |
538 |
return models; |
520 |
} |
539 |
} |
521 |
|
540 |
|
522 |
private synchronized void refreshModel() { |
541 |
private synchronized void refreshModel(DebuggerEngine e) { |
523 |
models.clear(); |
542 |
models.clear(); |
524 |
if (mm == null) { |
543 |
if (mm == null) { |
525 |
// Destroyed |
544 |
// Destroyed |
Lines 614-619
Link Here
|
614 |
} else { |
633 |
} else { |
615 |
newModel = null; |
634 |
newModel = null; |
616 |
} |
635 |
} |
|
|
636 |
if (mul != null) { |
637 |
mul.modelUpdated(newModel, e); |
638 |
} |
639 |
if (view == null) { |
640 |
return; |
641 |
} |
617 |
SwingUtilities.invokeLater(new Runnable() { |
642 |
SwingUtilities.invokeLater(new Runnable() { |
618 |
@Override |
643 |
@Override |
619 |
public void run() { |
644 |
public void run() { |
Lines 882-888
Link Here
|
882 |
|
907 |
|
883 |
private class ModelsChangeRefresher implements PropertyChangeListener, Runnable { |
908 |
private class ModelsChangeRefresher implements PropertyChangeListener, Runnable { |
884 |
|
909 |
|
|
|
910 |
private DebuggerEngine e; |
885 |
private RequestProcessor.Task task; |
911 |
private RequestProcessor.Task task; |
|
|
912 |
|
913 |
ModelsChangeRefresher(DebuggerEngine e) { |
914 |
this.e = e; |
915 |
} |
886 |
|
916 |
|
887 |
@Override |
917 |
@Override |
888 |
public synchronized void propertyChange(PropertyChangeEvent evt) { |
918 |
public synchronized void propertyChange(PropertyChangeEvent evt) { |
Lines 894-900
Link Here
|
894 |
|
924 |
|
895 |
@Override |
925 |
@Override |
896 |
public void run() { |
926 |
public void run() { |
897 |
refreshModel(); |
927 |
refreshModel(e); |
898 |
} |
928 |
} |
899 |
|
929 |
|
900 |
} |
930 |
} |