Как сделать редактор только для чтения в Eclipse (Eclipse Plugin Development)
-
05-07-2019 - |
Вопрос
Мне интересно, как сделать действительно доступный только для чтения редактор затмений ... Мой редактор расширяет TextEditor , поэтому, когда я переопределяю метод isEditable , чтобы всегда возвращать false . Р>
Это самый простой способ, который запрещает пользователю печатать или удалять что-либо в документе, открытом в редакторе. Но вы все равно можете изменить содержимое документа, например, с помощью поиска / замены. И это не желательно ..
Есть ли другой способ достижения этой цели?
Решение
Я хотел использовать редактор вместо средства просмотра, потому что редактор уже был создан, поэтому я просто использовал сторонний плагин ..
Я нашел свое решение - может быть, он не очень чистый, но выполняет свою работу и довольно прост, поэтому он выигрывает
Я переопределил эти методы:
@Override
public boolean isEditable() {
return false;
}
@Override
public boolean isEditorInputModifiable() {
return false;
}
@Override
public boolean isEditorInputReadOnly() {
return true;
}
@Override
public boolean isDirty() {
return false;
}
Другие советы
Вы пытались создать свой собственный 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;
}
}
В стилях SWT укажите SWT.RE . Это должно отклонить все API, которые изменяют документ (я надеюсь, за исключением setText () ...)
Если нет, сообщите об ошибке .
Почему вы используете TextEditor вместо TextViewer ?