## Workbench editors

Although the implementation of a workbench editor will be specific to your plug-in and the content that you want to edit, the workbench provides a general structure for building an editor. The following concepts apply to all workbench editors.

### Editor parts and their inputs

An editor must implement IEditorPart and is often built by extending the EditorPart class. An editor implements its user interface in the createPartControl method. This method is used to assemble the SWT widgets or JFace viewers that present the editor contents.

An editor input is a description of something to be edited. You can think of an editor input as a file name, though it is more general. IEditorInput defines the protocol for an editor input, including the name of the input and the image that should be used to represent it in the labels at the top of the editor.

Three generic editor inputs are provided in the platform. IFileEditorInput represents an input that is a file in the file system, and IURIEditorInput represents an input based on a URI. IStorageEditorInput represents an input that is a stream of bytes. These bytes may come from sources other than the file system.

### Resetting the editor input

If your editor can support the replacement of the editor's input object on the fly, you should implement IReusableEditor. Implementing this interface allows the workbench to "recycle" your editor. Workbench user preferences allow the user to dictate that editors should be reused after a certain number of them are open.

### Navigating the editor input

If you want to implement a navigation history in your editor, you should implement INavigationLocationProvider. This provides a mechanism for the workbench to request a current navigation location (INavigationLocation) as needed to keep a navigation history. The workbench handles the mechanics of the navigation user interface. Your INavigationLocation will be notified when it needs to restore the editor to the location that it represents.

The rest of your editor's implementation depends on the content that you are trying to present. We'll look next at the most common type of editor - the text editor.