Package projectviewer.action

Creating custom actions.

See: Description

Package projectviewer.action Description

Creating custom actions.

ProjectViewer allows other plugin developers too interact with the file trees by creating custom actions to be executed on the nodes. The actions are made available on the tree's context menu.

Creating a new action is very simple:

The menu item show in the context menu is provided by the getMenuItem() of the Action class. Subclasses are welcome to override this method to provide other kinds of menu items (a sub-menu, for example).

Before showing the menu item in the context menu, ProjectViewer will call the prepareForNode() method in all actions registered in the context menu. This allows each action to decide if it should be shown for the given node and what message to show, for example.

Another important thing to notice in the prepareForNode() method is that the actions should check is the node is of a certain type, and not if the node is not of a certain type. For example, use "node.isFile()" and not "!node.isDirectory()". This ensures that the action will not do anything wrong if a different node type is added in the future to PV, or if another plugin adds a custom node type to PV.

It's important to notice that the instance created by jEdit's ServiceManager is not the instance used by the viewer instances. Those instances are used as prototypes, and the viewers use clone() to get instances for the specific viewer. After the cloning, the setViewer() method is called, so the actions have a reference to the viewers where they are being used. This also means that you should not use the constructor of your Action implementation to instantiate GUI components. Instantiations of GUI components should be done lazily in the getMenuItem() method. The default implementation already does this, so you should only worry about this if you are overriding one of these methods.