0

RAP アプリケーションで Eclipse API を使用しています。これは Eclipse Modeling Frame Work を使用しています。ページが編集されると、モデルがダーティになり、その結果、保存ボタンが有効になります。

エディター ページでは、ページにエラーがある場合は常に、エディター ページの Validation フラグを false に設定します。これにより、ページに赤いマークが表示されます。通常、保存ボタンも有効になります。

しかし、私はこの動作を変更したい.ページにエラーマークが表示されたときに保存ボタンを有効にしたくない.エラー段階でユーザーがモデルを保存できないようにする. 保存ボタンを無効にする必要があります。これを実現するにはどうすればよいですか。私の疑問を解消してください。

4

1 に答える 1

1

EMF によって生成されたエディターは、commandstacklistener を使用して PROP_DIRTY をエディターに送信します。このプロパティが起動されると、基礎となるフレームワークはエディタ #isDirty メソッドにダーティ状態を尋ねます。これは、ロジックを実装できる場所です。

@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 トム

于 2011-01-29T20:41:50.910 に答える