2009-06-16 121 views
5

我不知道如何做一个真正的只读日食编辑..我的编辑延伸文本编辑,所以当我重新实现方法isEditable总是返回使只读编辑器假如何在Eclipse(Eclipse插件开发)

这是最简单的方法,它可以防止用户在编辑器中打开的文档中输入或删除任何内容。但是您仍然可以通过使用查找/替换来更改文档的内容。这是不希望的。

有没有其他的方式如何arhieve这个目标?

+8

尼斯oxymoron-“只读编辑器” – RichardOD 2009-06-16 13:02:04

+0

你说得对:d +1 – 2009-06-16 13:47:29

回答

9

我想用编辑器,而不是浏览器,因为编辑器已经做出,所以我只是用一个第三方插件..

,我发现我的解决方案 - 梅比不是很干净,但做这项工作,并是很容易的,因此赢得

我重写theese方法:

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

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

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

@Override 
public boolean isDirty() { 
    return false; 
} 
-1

在SWT样式中,指定SWT.READ_ONLY。这应该拒绝修改文档的所有API(除了setText(),我希望...)

如果不是,请file a bug

-1

为什么你使用TextEditor而不是使用TextViewer

0

您是否尝试过创建自己的SourceViewer?像这样的东西。我自己没有尝试过这些代码。

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; 
    } 
}