Lines 42-58
Link Here
|
42 |
package org.openide.explorer.view; |
42 |
package org.openide.explorer.view; |
43 |
|
43 |
|
44 |
import java.awt.BorderLayout; |
44 |
import java.awt.BorderLayout; |
|
|
45 |
import java.awt.EventQueue; |
46 |
import java.awt.event.HierarchyEvent; |
47 |
import java.awt.event.HierarchyListener; |
48 |
import java.awt.event.WindowAdapter; |
49 |
import java.awt.event.WindowEvent; |
45 |
import java.beans.PropertyVetoException; |
50 |
import java.beans.PropertyVetoException; |
46 |
import java.lang.ref.WeakReference; |
51 |
import java.lang.ref.WeakReference; |
47 |
import java.lang.reflect.InvocationTargetException; |
52 |
import java.lang.reflect.InvocationTargetException; |
|
|
53 |
import java.util.concurrent.CountDownLatch; |
48 |
import javax.swing.JFrame; |
54 |
import javax.swing.JFrame; |
49 |
import javax.swing.JPanel; |
55 |
import javax.swing.JPanel; |
|
|
56 |
import javax.swing.JTextField; |
50 |
import javax.swing.JTree; |
57 |
import javax.swing.JTree; |
51 |
import javax.swing.SwingUtilities; |
58 |
import javax.swing.SwingUtilities; |
52 |
import javax.swing.tree.TreePath; |
59 |
import javax.swing.tree.TreePath; |
53 |
import junit.framework.AssertionFailedError; |
60 |
import junit.framework.AssertionFailedError; |
54 |
import org.netbeans.junit.NbTestCase; |
61 |
import org.netbeans.junit.NbTestCase; |
55 |
import org.openide.explorer.ExplorerManager; |
62 |
import org.openide.explorer.ExplorerManager; |
|
|
63 |
import org.openide.explorer.view.TreeViewCellEditor.Ed; |
56 |
import org.openide.nodes.AbstractNode; |
64 |
import org.openide.nodes.AbstractNode; |
57 |
import org.openide.nodes.Children; |
65 |
import org.openide.nodes.Children; |
58 |
import org.openide.nodes.Node; |
66 |
import org.openide.nodes.Node; |
Lines 317-320
Link Here
|
317 |
return em; |
325 |
return em; |
318 |
} |
326 |
} |
319 |
} |
327 |
} |
|
|
328 |
|
329 |
public void testEditNode() throws Exception { |
330 |
Children.Array kids = new Children.Array(); |
331 |
Node[] n = new Node[20]; |
332 |
Node node = null; |
333 |
for (int i=0; i < n.length; i++) { |
334 |
n[i] = new RenamableNode ("" + i); |
335 |
if (i == 5) node = n[i]; //pick one to edit |
336 |
} |
337 |
kids.add(n); |
338 |
final Node root = new AbstractNode (kids); |
339 |
root.setDisplayName("Root"); |
340 |
final WL wl = new WL(); |
341 |
final F[] ff = new F[1]; |
342 |
EventQueue.invokeLater(new Runnable() { |
343 |
|
344 |
@Override |
345 |
public void run() { |
346 |
ff[0] = new F(root); |
347 |
ff[0].addWindowListener(wl); |
348 |
ff[0].pack(); |
349 |
ff[0].setVisible(true); |
350 |
} |
351 |
|
352 |
}); |
353 |
wl.latch.await(); |
354 |
F f = ff[0]; |
355 |
//sanity check |
356 |
assertTrue (f.isDisplayable()); |
357 |
assertTrue (f.isShowing()); |
358 |
assertTrue (f.view.isShowing()); |
359 |
JTree tree = f.view.tree; |
360 |
TreeViewCellEditor ce = (TreeViewCellEditor) tree.getCellEditor(); |
361 |
Ed ed = ce.ed(); |
362 |
final JTextField comp = ed.comp(); |
363 |
final CountDownLatch latch = new CountDownLatch(1); |
364 |
comp.addHierarchyListener(new HierarchyListener() { |
365 |
|
366 |
@Override |
367 |
public void hierarchyChanged(HierarchyEvent e) { |
368 |
if (comp.isDisplayable()) { |
369 |
latch.countDown(); |
370 |
} |
371 |
} |
372 |
|
373 |
}); |
374 |
f.view.editNode(node); |
375 |
latch.await(); |
376 |
assertTrue (tree.isEditing()); |
377 |
assertTrue (comp.isDisplayable()); |
378 |
f.setVisible(false); |
379 |
f.dispose(); |
380 |
} |
381 |
|
382 |
private static final class RenamableNode extends AbstractNode { |
383 |
RenamableNode (String name) { |
384 |
super (Children.LEAF); |
385 |
setDisplayName(name); |
386 |
setName (name); |
387 |
} |
388 |
|
389 |
@Override |
390 |
public boolean canRename() { |
391 |
return true; |
392 |
} |
393 |
} |
394 |
|
395 |
private static final class F extends JFrame implements ExplorerManager.Provider { |
396 |
private final ExplorerManager mgr = new ExplorerManager(); |
397 |
private final BeanTreeView view = new BeanTreeView(); |
398 |
F(Node root) { |
399 |
setContentPane(view); |
400 |
mgr.setRootContext(root); |
401 |
} |
402 |
|
403 |
@Override |
404 |
public ExplorerManager getExplorerManager() { |
405 |
return mgr; |
406 |
} |
407 |
|
408 |
} |
409 |
|
410 |
private static final class WL extends WindowAdapter { |
411 |
CountDownLatch latch = new CountDownLatch(1); |
412 |
|
413 |
@Override |
414 |
public void windowOpened(WindowEvent e) { |
415 |
super.windowOpened(e); |
416 |
latch.countDown(); |
417 |
} |
418 |
} |
320 |
} |
419 |
} |