一般「設定」を使用すると、ビューでオブジェクトをシングルクリックして開くのか、またはダブルクリックして開くのかをユーザーが指定できます。
この設定に関する制限は、すべてのビューに適用されないのはなぜでしょうか? それは、プラグインによって組み込まれたビューは、この設定をそれらの実装で明示にサポートする必要があるためです。
低レベルの詳細を扱うため、SWT コントロールの作成および標準 SWT コードの書き込みによって、または JFace ビューアーを使用して、ビューが実装されることを思い出してください。 シングルクリック設定を適用すると、どちらのレベルでも行うことができます。 他のオブジェクトを開く多くのビューは、構成された、リストのようなビューにオブジェクトを表示します。 ここでは、この種類のビューに注目してみましょう。 別の方法でビューがオブジェクトを表示する場合は、シングルクリックをサポートするため、SWT レベルの概念を使用することになるでしょう。
JFace リスト指向ビューアーを使用してオブジェクトを表示している場合、 シングルクリックをサポートすることが簡単です。 項目をビュー内に開くことを起動するため、addDoubleClickListener を使用する代わりに addOpenListener を使用します。 オープン・リスナーは、指定されたマウス・イベントが発生するときにオープン・イベントを実行する、現行のワークベンチの設定を適用します。
それでもダブルクリックによる項目のツリー展開など、非オープン・アクション用に addDoubleClickListener を使用することができます。
SWT コントロール・レベルでシングルおよびダブルクリックのロジスティクスを扱うため、JFace は、ユーティリティー・クラス OpenStrategy を提供します。 OpenStrategy は、 現行ワークベンチのオープン設定を適用するために、一般「設定」ダイアログによって構成されます。実際、JFace ビューアーは、このクラスを使用してオープン・リスナーをインプリメントします。
OpenStrategy を作成し、SWT コントロールに関連付ける必要があります。 OpenStrategy は、対応するイベントをフックし、 ユーザーの設定に基づいて解釈します。 あなたの責任は、開くコードをインプリメントするストラテジーにオープン・リスナーを追加することです。 このようにして、どのウィジェット・イベントがオープン・イベントを起動するかについての知識は、ユーザーには必要ありません。
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // code to handle the open event. ... } }
オープンの他のワークベンチ設定 (吹き出しで選択、矢印キーで開く) も、OpenStrategy によって処理されます。 これは、JFace ビューアーまたは OpenStrategy クラスを使用して、オープンに関する振る舞いをインプリメントした場合に「正しい動作」が起こることを意味します。
オープン・イベントを処理するとき、OpenStrategy.activateOnOpen() を使用して、 開かれたエディターをデフォルトで開くかどうかを決める必要があります。 エディターをアクティブにすると、ビューからエディターにフォーカスをスイッチします。 これは、シングルクリック・モードでは特に分かりにくいため望ましくありません。