Отключение кнопки "Сохранить" при возникновении ошибок проверки в приложении Eclipse-RAP
Мы используем Eclipse API в нашем приложении RAP. Это использует Eclipse Modeling Frame Work. Когда страница редактируется, модель становится грязной, и в результате кнопка "Сохранить" становится активной.
На наших страницах редактора, когда когда-либо возникает ошибка на странице, мы устанавливаем флаг проверки на странице редактора в значение false, что, в свою очередь, отображает красные метки на странице. Затем обычно становится активной кнопка сохранения.
Но я хочу изменить это поведение. Когда на странице появляется какая-либо отметка об ошибке, я не хочу включать кнопку сохранения. Она не должна позволять пользователю сохранять модель на этапе ошибки. Кнопка сохранения должна быть отключена, как мне этого добиться. Пожалуйста, проясните мои сомнения.
1 ответ
Редактор, сгенерированный EMF, использует командный стеклистайзер для запуска PROP_DIRTY для редактора. Если это свойство запущено, базовая структура будет запрашивать у редакторов #isDirty Method грязное состояние. Это место, где вы можете реализовать свою логику.
@Override
public boolean isDirty() {
Diagnostic diagnostic = validateMyModel();
return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK;
}
Этот случай не охватывает сценарий использования, поскольку редактор мог быть грязным, когда пользователь делает недопустимое редактирование модели.
Но это не лучший способ ИМХО. Потому что, если пользователь закрывает редактор, все изменения модели будут потеряны без какого-либо уведомления (из-за отсутствия грязного флага). Таким образом, он, вероятно, сделал 100 действительных модификаций, 1 недействительный и потерял свою измененную модель.
Лучший способ - показать предупреждающее сообщение, если пользователь хочет сохранить диалог. Если в диалоге есть ошибки, редактор не может изменить свое состояние с грязного на грязное, и пользователь должен
- исправить все ошибки или
- закрыть редактор и потеряет все свои изменения
Чтобы добиться этого, вы должны внедрить в свой метод doSave(IProgressMonitor progressMonitor) диалоговое окно для отображения ошибок. Более сложная задача - переопределить поведение по умолчанию при закрытии грязного редактора. Рабочая среда покажет диалоговое окно с Да, Нет и Отмена. Чтобы переопределить это поведение, вы должны реализовать интерфейс org.eclipse.ui.ISaveablePart2 в вашем редакторе, чтобы переопределить метод promptToSaveOnClose(). В этом методе снова должна быть ваша логика, которая проверяет наличие ошибок в модели. Если есть ошибки, этот метод должен возвращать ISaveablePart2.CANCEL, чтобы редактор не закрывался, пока в грязной модели есть ошибки.
HTH Том