1

私のEclipsercpアプリケーションでは、アクティビティを使用していくつかのビューを表示および非表示にします。アクティビティに関するEclipseのドキュメントを読み、ドキュメントの「式ベースのアクティビティの使用」スニペットに基づいた実用的な例を取得しようとしました。

最初のステップで、新しいビューを作成し、パースペクティブクラスにそのビューホルダーを追加しました。

layout.addPlaceholder(View1.ID, IPageLayout.RIGHT, 0.5f, layout.getEditorArea());

次に、 'enabledwhen'式とバインディングを使用してアクティビティを追加しました。

<extension point="org.eclipse.ui.activities">
    <activity id="org.project.activities.activity1" name="myActivity">
       <enabledWhen>
           <with variable="org.project.activities.sessionState">
               <equals value="loggedIn"></equals>
           </with>
       </enabledWhen>
    </activity>
</extension>
<activityPatternBinding
    activityId="org.project.activities.activity1"
    pattern="org.project.activities/org.project.activities.View1">
</activityPatternBinding> 

最後のステップで、ソースプロバイダーを追加しました。

public class ActivitiySourceProvider extends AbstractSourceProvider {
   public static final String SESSION_STATE = "org.project.activities.sessionState";
   private static final String LOGGED_OUT = "loggedOut";
   private static final String LOGGED_IN = "loggedIn";
   private static final String[] SOURCE_NAMES = new String[] { SESSION_STATE };
   private boolean loggedIn = false;

   @Override
   public Map<String, String> getCurrentState() {
       Map<String, String> map = new HashMap<String, String>(1);
       String value = loggedIn ? LOGGED_IN : LOGGED_OUT;
       map.put(SESSION_STATE, value);
       return map;
   }

   @Override
   public String[] getProvidedSourceNames() {
       return SOURCE_NAMES;
   }

   public void setLoggedIn() {
       loggedIn = !loggedIn;
       String value = loggedIn ? LOGGED_IN : LOGGED_OUT;
       fireSourceChanged(ISources.WORKBENCH, SESSION_STATE, value);
   }
}

テストアプリケーションを起動すると、ビュー' View1'が非表示になり、変数を切り替えると、ビューは非表示のままになります。変数を切り替えるためにハンドルを使用しましたが、例外はありません。また、アプリケーションの開始時に変数を明示的に「loggedOut」に設定しようとしましたが、どちらも機能しませんでした。

ドキュメントから何かを見逃しましたか?

4

1 に答える 1

0

ActivitySourceProvider拡張ポイント の拡張にソース プロバイダーとして登録しましたorg.eclipse.ui.servicesか? それ以外の場合、式の評価には使用されません。

于 2013-01-21T14:45:22.973 に答える