2

hereに従って、紹介ページから Eclipse でパースペクティブを開く IIntroAction を実装しました (私のアクションはほとんど同じです)。

私のものはそこに示されているものとは少し異なりますが、基本的には(URLとして)呼び出されます: http://org.eclipse.ui.intro/runAction?class=my.plugin.actions.OpenPerspectiveAction&pluginId=my.plugin&pId=my.other.plugin.MyPerspective

pId は、開きたいパースペクティブの ID です。(そしてこれはうまくいきます!...ほとんどの場合。)

上記のリンクに記載されているように、このアクションの問題は、ウェルカム ページの下で MyPerspective が開いている場合、開かれない (または、ウェルカム ページが閉じない) ことです。

ウェルカム ページの下に開いている場合でも、アクションの呼び出し時に目的のパースペクティブを表示するにはどうすればよいですか?

私が調査した可能な解決策へのいくつかのパス(完全ではないため、何かを見落としている可能性があります):

  • PerspectiveRegistry で何かをする (ただし、結果は表示されませんでした...)
  • ワークベンチをチェックして、開いているパースペクティブが何であるかを確認し、そこから切り替えます
  • ワークベンチをチェックして、開いているパースペクティブを確認し、それが目的のパースペクティブかどうかを確認します

これらは概念的な解決策にすぎません --- 実際に実装できるかどうかはわかりません! この問題をどのように解決できるかについて、誰かが洞察を得ることができれば幸いです。

4

1 に答える 1

3

次のコードは、私の RCP プロジェクトで正常に動作しています。

紹介ページのリンク:

<a id="a-ism" href="http://org.eclipse.ui.intro/runAction?pluginId=sernet.gs.ui.rcp.main&#38;class=sernet.gs.ui.rcp.main.actions.ShowISMPerspectiveIntroAction">

アクション クラス:

public class ShowISMPerspectiveIntroAction extends ShowPerspectiveIntroAction {

  @Override
  public String getCheatSheetId() {
    return "sernet.gs.ui.rcp.main.cheatsheet1";
  }

  @Override
  public String getPerspectiveId() {
    return Iso27kPerspective.ID;
  }
}

アクション基本クラス:

import  org.eclipse.ui.intro.config.IIntroAction;

public abstract class ShowPerspectiveIntroAction implements IIntroAction {

  private static final Logger LOG = Logger.getLogger(ShowPerspectiveIntroAction.class);

  @Override
  public void run(IIntroSite arg0, Properties arg1) {
    // Switch to perspective
    final IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    IPerspectiveDescriptor activePerspective = workbenchWindow.getActivePage().getPerspective();
    if(activePerspective==null || !activePerspective.getId().equals(getPerspectiveId())) {           
        Display.getCurrent().asyncExec(new Runnable() {
            public void run() {
                // switch perspective           
                try {
                    workbenchWindow.getWorkbench().showPerspective(getPerspectiveId(),workbenchWindow);
                } catch (WorkbenchException e) {
                    LOG.error("Can not switch to perspective: " + getPerspectiveId(), e);
                }
            }
        });
    }

    // close intro/welcome page
    final IIntroPart introPart = PlatformUI.getWorkbench().getIntroManager().getIntro(); 
    PlatformUI.getWorkbench().getIntroManager().closeIntro(introPart);

    // Show CheatSheet
    ShowCheatSheetAction action = new ShowCheatSheetAction("Show security assessment cheat sheet", getCheatSheetId());
    action.run();
  }

  public abstract String getCheatSheetId();
  public abstract String getPerspectiveId();
}
于 2012-07-06T07:56:05.090 に答える