2009-06-16 156 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; 
    } 
}