|
|||||||||||
PREV NEXT | FRAMES NO FRAMES |
See:
Description
Navigator API | |
org.netbeans.spi.navigator |
Navigator API is good for clients (module writers) that want to show some structure or outline of their document in dedicated window, allowing end user fast navigation and control over the document.
API allows its clients to plug in their Swing based views easily, which then will be automatically shown in specialized Navigator UI.
Client's views are registered through declarative xml layers approach.
org.netbeans.spi.navigator.NavigatorPanelImplementing NavigatorPanel interface is easy, you can copy from template basic implementation BasicNavPanelImpl.java.
Advices on important part of panel implementation:/** JavaDataObject used as example, replace with your own data source */ private static final Lookup.Template MY_DATA = new Lookup.Template(JavaDataObject.class); public void panelActivated (Lookup context) { // lookup context and listen to result to get notified about context changes curResult = context.lookup(MY_DATA); curResult.addLookupListener(/** your LookupListener impl here*/); Collection data = curResult.allInstances(); // ... compute view from data and trigger repaint }Do *not* perform any long computation in panelActivated directly, see below.
Declarative registration of your NavigatorPanel impl connects this implementation with specific content type, which is type of the document, expressed in mime-type syntax, for example 'text/x-java' for java sources. Infrastructure will automatically load and show your NavigatorPanel impl in UI, when currently activated Node is backed by primary FileObject whose FileObject.getMimeType() equals to content type specified in your layer.
Writing layer registration itself is easy, you can again copy from template layer Basic Navigator Registration Layer.
Additional important info:There may be situations where linking between your Navigator view and activated Node's primary FileObject is not enough or not possible at all. This simply happens when the data you want to represent in Navigator are not accessible through primary FileObject or DataObject. Usual example is Multiview environment, where more views of one document exists.
The solution is to bind content of your Navigator view directly to your TopComponent. Then, whenever your TopComponent gets activated in the system, Navigator UI will show th content you connected to it.
Steps to do:class AmazingTypeLookupHint implements NavigatorLookupHint { public String getContentType () { return "text/my-amazing-type"; } }
Node
subclass
instead of directly altering lookup of your TopComponent
.
See Node.getLookup() method.
Then Navigator will show your desired content whenever your Node
subclass will be active in the system.TopComponent.getLookup()
includes also results from
lookup of asociated Node
. So this approach will stop
working if you change default behaviour of TopComponent.getLookup()
method.
|
The sources for the module are in NetBeans CVS in core/navigator directory.
Just regular dependency in project metadata to code base name: org.netbeans.api.navigator
Read more about the implementation in the answers to architecture questions.
|
|||||||||||
PREV NEXT | FRAMES NO FRAMES |