Package org.eclipse.ui.cheatsheets

Source Code of org.eclipse.ui.cheatsheets.OpenCheatSheetAction

/*******************************************************************************
* Copyright (c) 2004, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.cheatsheets;

import java.net.URL;

import org.eclipse.help.ui.internal.views.HelpTray;
import org.eclipse.help.ui.internal.views.IHelpPartPage;
import org.eclipse.help.ui.internal.views.ReusableHelpPart;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.internal.cheatsheets.registry.CheatSheetElement;
import org.eclipse.ui.internal.cheatsheets.registry.CheatSheetRegistryReader;
import org.eclipse.ui.internal.cheatsheets.state.DefaultStateManager;
import org.eclipse.ui.internal.cheatsheets.views.CheatSheetHelpPart;
import org.eclipse.ui.internal.cheatsheets.views.CheatSheetView;
import org.eclipse.ui.internal.cheatsheets.views.ViewUtilities;

/**
* Action for opening a cheat sheet. The cheat sheet can be specified
* either by a cheat sheet id or by a URL of a cheat sheet content file.
* <p>
* This class is not intended to be subclassed by clients.
* </p>
*
* @since 3.0
*/
public final class OpenCheatSheetAction extends Action {
  private String id;
  private String name;
  private URL url;
  private String xml;
  private String basePath;

  /**
   * Creates an action that opens the cheat sheet with the given id.
   * The cheat sheet content file is located via the
   * <code>org.eclipse.ui.cheatsheets.cheatSheetContent</code>
   * extension point.
   *
   * @param id the cheat sheet id
   * @exception IllegalArgumentException if <code>id</code>
   * is <code>null</code>
   */
  public OpenCheatSheetAction(String id) {
    if (id == null) {
      throw new IllegalArgumentException();
    }
    this.id = id;
  }
 
  /**
   * Creates an action that opens the cheat sheet with the
   * given cheat sheet content file.
   *
   * @param id the id to give this cheat sheet
   * @param name the name to give this cheat sheet
   * @param url URL of the cheat sheet content file
   * @exception IllegalArgumentException if the parameters
   * are <code>null</code>
   */
  public OpenCheatSheetAction(String id, String name, URL url) {
    if (id == null || name == null || url == null) {
      throw new IllegalArgumentException();
    }
    this.id = id;
    this.name = name;
    this.url = url;
  }
 
  /**
   * Creates an action that opens a cheat sheet using
   * XML passed in as a string.
   *
   * @param id the id to give this cheat sheet
   * @param name the name to give this cheat sheet
   * @param xml the cheatsheet content in xml format
   * @param baseURL is a URL which is only required if the cheat sheet is
   * a composite cheat sheet which has tasks which use path parameters in which
   * case the paths will be relative to baseURL. May be <code>null</code>
   * if this is not a composite cheat sheet
   * @exception IllegalArgumentException if the parameters
   * are <code>null</code>
   * @since 3.3
   */
  public OpenCheatSheetAction(String id, String name, String xml, URL baseURL) {
    if (id == null || name == null || xml == null) {
      throw new IllegalArgumentException();
    }
    this.id = id;
    this.name = name;
    this.xml = xml;
    if (baseURL !=null) {
      basePath = baseURL.toExternalForm();
    }
  }


  /* (non-javadoc)
   * This action will try to launch the cheat sheet view and populate
   * it with the content specified either in the URL or the content
   * file specified in the cheatsheetContent extension point
   * for the cheat sheet with the id passed to this action.
   * @see IAction#run()
   */
  public void run() {
    Shell shell = Display.getDefault().getActiveShell();
    Object data = shell.getData();
    // are we in a dialog that can show a cheat sheet?
    if (!shell.isFocusControl() && data instanceof TrayDialog) {
      TrayDialog dialog = (TrayDialog)data;
      HelpTray tray = (HelpTray)dialog.getTray();
      if (tray == null) {
        tray = new HelpTray();
        dialog.openTray(tray);
      }
      ReusableHelpPart helpPart = tray.getHelpPart();
      IHelpPartPage page = helpPart.createPage(CheatSheetHelpPart.ID, null, null);
      page.setVerticalSpacing(0);
      page.setHorizontalMargin(0);
      CheatSheetElement contentElement = CheatSheetRegistryReader.getInstance().findCheatSheet(id);
      helpPart.addPart(CheatSheetHelpPart.ID, new CheatSheetHelpPart(helpPart.getForm().getForm().getBody(), helpPart.getForm().getToolkit(), page.getToolBarManager(), contentElement, new DefaultStateManager()));
      page.addPart(CheatSheetHelpPart.ID, true);
      helpPart.addPage(page);
      helpPart.showPage(CheatSheetHelpPart.ID);
    }
    else {
      CheatSheetView view = ViewUtilities.showCheatSheetView();
      if (view == null) {
        return;
      }
      // Depending on which constructor was used open the cheat sheet view from a
      // URL, an XML string or based on the id
      if(url != null) {
        view.setInput(id, name, url);
      } else if (xml != null) {
        view.setInputFromXml(id, name, xml, basePath);
      } else {
        view.setInput(id);
      }
      IWorkbenchPage page = view.getSite().getWorkbenchWindow().getActivePage();
      page.bringToTop(view);
    }
  }
}
TOP

Related Classes of org.eclipse.ui.cheatsheets.OpenCheatSheetAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.