0

私からの新しい Eclipse Scout の質問:

テンプレート「アウトライン ツリーとテーブル フォーム」に大まかに基づいている私のスカウト アプリケーションでは、ノードをクリックして (検索) フォームの新しいインスタンスを追加することができました。私のフォームの表示プロパティは次のように構成されています。

  @Override
  protected int getConfiguredDisplayHint() { return DISPLAY_HINT_VIEW; }    
  @Override
  protected String getConfiguredDisplayViewId() { return VIEW_ID_PAGE_DETAIL; }

組み込みメソッド (setDetailForm(IForm form) など) を使用してフォームをページに追加するのではなく、それらをページの新しい属性として設定し、FormHandler を介して開始します。このようにして、Scout レンダラーがフォームを隣り合わせにタブ化することを達成しました。これはまさに私が望んでいることです。それらをフォームとしてページに追加すると、ページがアクティブになるたびにレンダラーが他のフォームを閉じるため、一度に表示されるフォームは 1 つだけです。

この実装に関する私の問題は次のとおりです。

  1. タブの再アクティブ化は、RAP クライアントでのみ可能です。RAP クライアントの場合、フォームの activate() メソッドを呼び出して、対応するタブを再アクティブ化してフォーカスするだけで十分です。一方、(私が依存している) SWT クライアントは activate() 呼び出しをまったく気にしていないようで、そのためページを再アクティブ化しません。だから私は、SWT レンダラーを説得するための安全で簡単な方法を探しています。
    1. できればScout TabFieldを使用せずに、フォームを隣り合わせにタブで移動します。上記のように、これはすでに機能していますが、これが推奨される方法であるかどうかはわかりません。
    2. RAP クライアントがすでに行っているように、NodeClick のタブを再アクティブ化します。
  2. タブをクリックしてタブを閉じる (SWT では X ボタン、RAP ではボタンなし -.-) などのイベントを受け取ります。Scoutの抽象プログラミングモデルの一部ではない製品固有のプロセスに踏み込むことは、Scoutの一般的な問題であるため、この質問は少し広いと思います。それでも、特定のレンダリング プロダクトを微調整せずに、これらのイベントやその他のイベントをグローバル クライアントから処理できると便利です。

物事を簡単に理解できるようにするための私のプログラムの UI のスクリーンショット: Scout アプリケーションのスクリーンショット

スクリーンショットでは、5 番目のフォームがビューとしてアクティブ化され、左側のアウトライン ツリー内の対応するノードもマークされています。ご覧のとおり、複数のフォームが追加されており、それらはすべてアウトライン ツリーのノードに属しています。ツリー内のノードをクリックすると、対応するフォームがアクティブになり、以前に開いていない場合はフォーカスされます。それ以外は、タブは同じままにする必要があります。既に存在するフォームを再初期化したくありません。


Scout バージョン 5.0 を使用しています

4

1 に答える 1

0

RAP UI は、SWT よりも SWING UI に近いです。xこれが、そのままでは RAPでビューを閉じることができない理由です(Swing と同様)。

SWT については、Eclipse プラットフォームが提供するワークベンチに依存しています。これは、ビューがビュー スタックでどのように開かれ、タブ化されるかを定義します。

私にとっては、そのようにスカウト (SWT レンダラー) を使用しても問題ありません。ここに例があります:

ビューとして開いたフォーム

ComplexForm、すでに開いているフォームの横にある SWT ビューとして開かれます。


activate()スカウト フォームがあなたに合わないと聞いて驚いています。同様の問題があり、Bug 433010activate()が発生しましたが、この方法が解決策だったという理由だけで、それをクローズすることにしました。

ComplexForm form = new ComplexForm();
form.startNew();
form.activate();

activate()どのイベント (メニューまたはノードのどこかをクリック)で、フォーム インスタンスを呼び出すことができると思います。

どのバージョンの Scout を使用していますか?

私はあなたの要点を逃しているので、あなたの質問にスクリーンショットを追加できるかもしれません。

于 2015-10-01T11:37:40.637 に答える