views:

834

answers:

4

Hi,

I'm wondering how to make a really read only eclipse editor.. My editor extends TextEditor, so when I reimplement method isEditable to always return false.

It's the easiest way, which prevents user from typing or deleting anything in the document opened in the editor. But you can still change content of the document for example by using find/replace. And this is not desired..

Is there any other aesy way how to arhieve this goal?

A: 

In the SWT styles, specify SWT.READ_ONLY. This should reject all APIs which modify the document (with the exception of setText(), I hope ...)

If not, please file a bug.

Aaron Digulla
A: 

Why you are using a TextEditor instead of using a TextViewer?

Markus Lausberg
Because I'm using a 3rd party editor to display generated source code in multi-page editor
Martin Lazar
But when you only want to display the source code you should think about writing your own viewer. But i can imagine, that you want to use the highlighting of the 3rd party editor to show the code.
Markus Lausberg
A: 

Have you tried to create your own SourceViewer? Something like this. I haven't tried the code myself.

class ReadOnlyViewer extends SourceViewer
{
   protected StyledText createTextWidget(Composite parent, int styles) 
   {
    return new StyledText(parent, styles | SWT.READ_ONLY);
   }
}

class MyEditor extends TextEditor
{
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) 
     {
     fAnnotationAccess= getAnnotationAccess();
     fOverviewRuler= createOverviewRuler(getSharedColors());

     ISourceViewer viewer= new ReadOnlyViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
     // ensure decoration support has been created and configured.
     getSourceViewerDecorationSupport(viewer);

     return viewer;
    }
}
Kire Haglin
+4  A: 

I wanted to use editor instead of viewer because the editor was already made, so I just used a 3rd party plugin..

I found my solution - maybee not very clean but does the job and is pretty easy so it wins

I've overriden theese methods:

@Override
public boolean isEditable() {
    return false;
}

@Override
public boolean isEditorInputModifiable() {
    return false;
}

@Override
public boolean isEditorInputReadOnly() {
    return true;
}

@Override
public boolean isDirty() {
    return false;
}
Martin Lazar