Lines 28-35
Link Here
|
28 |
import java.util.SortedSet; |
28 |
import java.util.SortedSet; |
29 |
import java.util.TreeMap; |
29 |
import java.util.TreeMap; |
30 |
import java.util.TreeSet; |
30 |
import java.util.TreeSet; |
|
|
31 |
import javax.swing.Action; |
31 |
import org.netbeans.api.java.queries.AccessibilityQuery; |
32 |
import org.netbeans.api.java.queries.AccessibilityQuery; |
32 |
import org.openide.ErrorManager; |
33 |
import org.openide.ErrorManager; |
|
|
34 |
import org.openide.actions.FileSystemAction; |
33 |
import org.openide.filesystems.FileAttributeEvent; |
35 |
import org.openide.filesystems.FileAttributeEvent; |
34 |
import org.openide.filesystems.FileChangeListener; |
36 |
import org.openide.filesystems.FileChangeListener; |
35 |
import org.openide.filesystems.FileEvent; |
37 |
import org.openide.filesystems.FileEvent; |
Lines 46-54
Link Here
|
46 |
import org.openide.nodes.FilterNode; |
48 |
import org.openide.nodes.FilterNode; |
47 |
import org.openide.nodes.Node; |
49 |
import org.openide.nodes.Node; |
48 |
import org.openide.util.Lookup; |
50 |
import org.openide.util.Lookup; |
|
|
51 |
import org.openide.util.LookupListener; |
49 |
import org.openide.util.NbBundle; |
52 |
import org.openide.util.NbBundle; |
50 |
import org.openide.util.RequestProcessor; |
53 |
import org.openide.util.RequestProcessor; |
51 |
import org.openide.util.Utilities; |
54 |
import org.openide.util.Utilities; |
|
|
55 |
import org.openide.util.actions.Presenter; |
52 |
import org.openide.util.lookup.Lookups; |
56 |
import org.openide.util.lookup.Lookups; |
53 |
import org.openide.util.lookup.ProxyLookup; |
57 |
import org.openide.util.lookup.ProxyLookup; |
54 |
import org.openidex.search.SimpleSearchInfo; |
58 |
import org.openidex.search.SimpleSearchInfo; |
Lines 331-337
Link Here
|
331 |
} |
335 |
} |
332 |
*/ |
336 |
*/ |
333 |
|
337 |
|
|
|
338 |
/** For a given Lookup creates new Lookup that converts any PackageNode inside itself into |
339 |
* all its subnodes. |
340 |
* |
341 |
* @param lookup input lookup that may contain, add or remove PackageNode |
342 |
* @return lookup that is either empty or contains nodes contained in the package |
343 |
*/ |
344 |
public static Lookup packagesToContent (Lookup lookup) { |
345 |
return new PackageLookup (lookup); |
346 |
} |
334 |
|
347 |
|
|
|
348 |
private static final class PackageLookup extends ProxyLookup |
349 |
implements org.openide.util.LookupListener { |
350 |
private static final Lookup.Template NODE = new Lookup.Template (PackageNode.class); |
351 |
|
352 |
/** Lookup result we take nodes from */ |
353 |
private Lookup.Result delegate; |
354 |
|
355 |
public PackageLookup (Lookup source) { |
356 |
delegate = source.lookup (NODE); |
357 |
delegate.addLookupListener ( |
358 |
(LookupListener)org.openide.util.WeakListeners.create (LookupListener.class, this, delegate) |
359 |
); |
360 |
resultChanged (null); |
361 |
} |
362 |
|
363 |
public void resultChanged(org.openide.util.LookupEvent ev) { |
364 |
java.util.Collection instances = delegate.allInstances(); |
365 |
ArrayList lookups = new ArrayList (); |
366 |
java.util.Iterator it = instances.iterator (); |
367 |
while (it.hasNext()) { |
368 |
Node n = (Node)it.next (); |
369 |
Node[] arr = n.getChildren().getNodes(true); |
370 |
for (int i = 0; i < arr.length; i++) { |
371 |
lookups.add (arr[i].getLookup()); |
372 |
} |
373 |
} |
374 |
setLookups ((Lookup[])lookups.toArray (new Lookup[0])); |
375 |
} |
376 |
|
377 |
} |
335 |
|
378 |
|
336 |
private static final class PackageNode extends FilterNode { |
379 |
private static final class PackageNode extends FilterNode { |
337 |
|
380 |
|
Lines 355-367
Link Here
|
355 |
private boolean isDefaultPackage; |
398 |
private boolean isDefaultPackage; |
356 |
|
399 |
|
357 |
public PackageNode( FileObject root, DataFolder dataFolder ) { |
400 |
public PackageNode( FileObject root, DataFolder dataFolder ) { |
358 |
super( dataFolder.getNodeDelegate(), |
401 |
super( |
359 |
isEmpty( dataFolder ) ? Children.LEAF : dataFolder.createNodeChildren( NO_FOLDERS_FILTER ), |
402 |
dataFolder.getNodeDelegate(), |
360 |
new ProxyLookup(new Lookup[] {dataFolder.getNodeDelegate().getLookup(), |
403 |
isEmpty( dataFolder ) ? Children.LEAF : dataFolder.createNodeChildren( NO_FOLDERS_FILTER ), |
361 |
Lookups.singleton(new SimpleSearchInfo(dataFolder, false))})); |
404 |
new AssignLookup () |
|
|
405 |
); |
362 |
this.root = root; |
406 |
this.root = root; |
363 |
this.dataFolder = dataFolder; |
407 |
this.dataFolder = dataFolder; |
364 |
this.isDefaultPackage = root.equals( dataFolder.getPrimaryFile() ); |
408 |
this.isDefaultPackage = root.equals( dataFolder.getPrimaryFile() ); |
|
|
409 |
|
410 |
AssignLookup asign = (AssignLookup)getLookup (); |
411 |
asign.assignLookups (new Lookup[] { |
412 |
dataFolder.getNodeDelegate().getLookup(), |
413 |
Lookups.singleton(new SimpleSearchInfo(dataFolder, false)), |
414 |
Lookups.singleton(this), |
415 |
}); |
365 |
} |
416 |
} |
366 |
|
417 |
|
367 |
public String getName() { |
418 |
public String getName() { |
Lines 490-497
Link Here
|
490 |
return true; |
541 |
return true; |
491 |
} |
542 |
} |
492 |
|
543 |
|
|
|
544 |
public javax.swing.Action[] getActions(boolean context) { |
545 |
javax.swing.Action[] old = super.getActions(context); |
546 |
javax.swing.Action[] retValue = new javax.swing.Action[old.length]; |
547 |
for (int i = 0; i < retValue.length; i++) { |
548 |
if (old[i] instanceof org.openide.actions.FileSystemAction) { |
549 |
retValue[i] = PkgAction.DEFAULT; |
550 |
} else { |
551 |
retValue[i] = old[i]; |
552 |
} |
553 |
} |
554 |
return retValue; |
555 |
} |
493 |
|
556 |
|
494 |
} |
557 |
} // end of PackageNode |
495 |
|
558 |
|
|
|
559 |
private static final class AssignLookup extends ProxyLookup { |
560 |
public AssignLookup () { |
561 |
super (new Lookup[0]); |
562 |
} |
563 |
|
564 |
public void assignLookups (Lookup[] arr) { |
565 |
setLookups (arr); |
566 |
} |
567 |
} // end of AssignLookup |
496 |
|
568 |
|
|
|
569 |
/** Special action that delegates file system operations to the |
570 |
* content of package only, not the whole tree. |
571 |
*/ |
572 |
private static final class PkgAction |
573 |
implements javax.swing.Action, org.openide.util.ContextAwareAction, |
574 |
Presenter.Menu, Presenter.Popup { |
575 |
static final PkgAction DEFAULT = create ( |
576 |
Utilities.actionsGlobalContext() |
577 |
); |
578 |
private javax.swing.Action delegate; |
579 |
|
580 |
|
581 |
|
582 |
private PkgAction (Action d) { |
583 |
delegate = d; |
584 |
} |
585 |
|
586 |
// |
587 |
// Presentation stuff |
588 |
// |
589 |
|
590 |
/** @return menu presenter. */ |
591 |
public javax.swing.JMenuItem getMenuPresenter () { |
592 |
return ((Presenter.Menu)delegate).getMenuPresenter (); |
593 |
} |
594 |
|
595 |
/** @return popup presenter. */ |
596 |
public javax.swing.JMenuItem getPopupPresenter () { |
597 |
return ((Presenter.Popup)delegate).getPopupPresenter (); |
598 |
} |
599 |
|
600 |
// |
601 |
// Action stuff |
602 |
// |
603 |
|
604 |
public void actionPerformed(java.awt.event.ActionEvent e) { |
605 |
delegate.actionPerformed (e); |
606 |
} |
607 |
|
608 |
public void addPropertyChangeListener(PropertyChangeListener listener) { |
609 |
delegate.addPropertyChangeListener (listener); |
610 |
} |
611 |
|
612 |
public Object getValue(String key) { |
613 |
return delegate.getValue (key); |
614 |
} |
615 |
|
616 |
public boolean isEnabled() { |
617 |
return delegate.isEnabled (); |
618 |
} |
619 |
|
620 |
public void putValue(String key, Object value) { |
621 |
delegate.putValue (key, value); |
622 |
} |
623 |
|
624 |
public void removePropertyChangeListener(PropertyChangeListener listener) { |
625 |
delegate.removePropertyChangeListener (listener); |
626 |
} |
627 |
|
628 |
public void setEnabled(boolean b) { |
629 |
delegate.setEnabled (b); |
630 |
} |
631 |
|
632 |
public javax.swing.Action createContextAwareInstance(Lookup actionContext) { |
633 |
return create (actionContext); |
634 |
} |
635 |
|
636 |
private static PkgAction create (Lookup context) { |
637 |
FileSystemAction action = (FileSystemAction)FileSystemAction.get (FileSystemAction.class); |
638 |
return new PkgAction ( |
639 |
action.createContextAwareInstance (packagesToContent (context)) |
640 |
); |
641 |
} |
642 |
} // end of PkgAction |
497 |
} |
643 |
} |