Child pages
  • The Plug-in Architecture of Eclipse

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Add the following methods to SimpleEditorPart:

    Code Block
    languagejava
    /**
     * Returns the text that is currently displayed in the editor.
     * @return the currently displayed text
     */
    public String getText() {
        return getDocumentProvider().getDocument(getEditorInput()).get();
    }
    /** The listener that is currently registered for this editor. */
    private IDocumentListener registeredListener;
    /**
     * Registers the given runnable as listener for changes to the text
     * of this editor.
     * @param runnable a runnable to register as text listener
     */
    public void registerTextListener(final Runnable runnable) {
        registeredListener = new IDocumentListener() {
            public void documentAboutToBeChanged(DocumentEvent event) {}
            public void documentChanged(DocumentEvent event) {
                runnable.run();
            }
        };
        getDocumentProvider().getDocument(getEditorInput())
                .addDocumentListener(registeredListener);
    }
    /**
     * Removes the last registered text listener.
     */
    public void disposeTextListener() {
        if (registeredListener != null) {
            if (getDocumentProvider() != null) {
                getDocumentProvider().getDocument(getEditorInput())
                        .removeDocumentListener(registeredListener);
            }
            registeredListener = null;
        }
    }
  2. Add the following code to TapeViewPart:

    Code Block
    languagejava
    /** The editor part that is currently set as input for the viewer. */
    private SimpleEditorPart currentInput;
    /**
     * Sets the displayed text of the given editor part as input of the
     * viewer, if the editor part is a SimpleEditorPart.
     * @param part workbench part to set as input
     */
    private void setInput(final IWorkbenchPart part) {
        if (part instanceof SimpleEditorPart && part != currentInput) {
            if (currentInput != null) {
                currentInput.disposeTextListener();
            }
            currentInput = (SimpleEditorPart) part;
            Runnable runnable = new Runnable() {
                public void run() {
                    tape.setText(new StringBuffer(currentInput.getText()));
                    tableViewer.refresh();
                }
            };
            runnable.run();
            currentInput.registerTextListener(runnable);
        }
    }
  3. Add the following code to createPartControl():

    Code Block
    languagejava
    IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow();
    IWorkbenchPage activePage = workbenchWindow.getActivePage();
    if (activePage != null) {
        setInput(activePage.getActivePart());
    }
    workbenchWindow.getPartService().addPartListener(new IPartListener() {
            public void partActivated(final IWorkbenchPart part) {
                setInput(part);
            }
            public void partDeactivated(final IWorkbenchPart part) {}
            public void partBroughtToTop(final IWorkbenchPart part) {}
            public void partClosed(final IWorkbenchPart part) {}
            public void partOpened(final IWorkbenchPart part) {}
    });

...