Отключение кнопки «Сохранить» при возникновении ошибок проверки в приложении Eclipse-RAP - PullRequest
0 голосов
/ 29 января 2011

Мы используем Eclipse API в нашем приложении RAP. Это использует Eclipse Modeling Frame Work. Когда страница редактируется, модель становится грязной и в результате кнопка «Сохранить» становится активной.

На наших страницах редактора, когда когда-либо возникает ошибка на странице, мы устанавливаем флаг проверки на странице редактора в значение false, что, в свою очередь, приводит к отображению красных меток на странице. Затем обычно становится активной кнопка сохранения. .

Но я хочу изменить это поведение. Когда на странице появляется какая-либо отметка об ошибке, я не хочу включать кнопку сохранения. Она не должна позволять пользователю сохранять модель на этапе ошибки. Кнопка сохранения должна быть отключена, как мне этого добиться. Пожалуйста, проясните мои сомнения.

1 Ответ

1 голос
/ 29 января 2011

Редактор, сгенерированный 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 Tom

...