CommandComposerPart.java :  » IDE-Eclipse » Eclipse-plug-in-development » org » eclipse » pde » internal » ui » commands » Java Open Source

Java Open Source » IDE Eclipse » Eclipse plug in development 
Eclipse plug in development » org » eclipse » pde » internal » ui » commands » CommandComposerPart.java
/*******************************************************************************
 * Copyright (c) 2006, 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.pde.internal.ui.commands;

import java.util.HashMap;

import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.pde.internal.ui.PDEPluginImages;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;

/**
 * This class is meant to be used to integrate the Command Composer into a UI (View, Dialog)
 * <ul>
 * <li>setFilterType(int)</li>
 * <li>setButtonCreator(IDialogButtonCreator)</li>
 * <li>setPresetCommand(ParameterizedCommand)</li>
 * <li>setSnapshotContext(IEvaluationContext) - optional</li>
 * </ul>
 * 
 * should all be called before creating the actual control:
 * 
 * Scrolled form = CommandComposerPart#createForm(Composite)
 * CommandComposerPart#createPartControl(form)
 * 
 */
public class CommandComposerPart implements ISelectionChangedListener {
  
  public static final int F_FILTER_NOT_SET = CommandCopyFilter.indexOf(CommandCopyFilter.NONE);
  public static final int F_HELP_FILTER = CommandCopyFilter.indexOf(CommandCopyFilter.HELP);
  public static final int F_CHEATSHEET_FILTER = CommandCopyFilter.indexOf(CommandCopyFilter.CHEATSHEET);
  public static final int F_INTRO_FILTER = CommandCopyFilter.indexOf(CommandCopyFilter.INTRO);
  
  private static final ICommandService fCommandService = initCommandService();
  
  private final TagManager fTagManager = new TagManager();
  private FormToolkit fToolkit;
  private ScrolledForm fScrolledForm;
  private CommandList fCommandList;
  private CommandDetails fCommandDetails;
  private int fFilterType = F_FILTER_NOT_SET;
  private ParameterizedCommand fPC;
  private Image fCommandImage;
  private IEvaluationContext fSnapshotContext;
  
  private static ICommandService initCommandService() {
    IWorkbench workbench = PlatformUI.getWorkbench();
    Object serviceObject = workbench.getAdapter(ICommandService.class);
    if (serviceObject instanceof ICommandService)
      return (ICommandService) serviceObject;
    return null;
  }
  
  public void setFilterType(int filterType) {
    fFilterType = filterType;
  }
  
  public int getFilterType() {
    return fFilterType;
  }
  
  /**
   * Set a snapshot context to be used by the command details section of this
   * part.
   * 
   * @param context
   *            the context to use. May be <code>null</code>.
   * @since 3.3
   */
  public void setSnapshotContext(IEvaluationContext context) {
    fSnapshotContext = context;
  }
  
  /**
   * @return
   */
  public IEvaluationContext getSnapshotContext() {
    return fSnapshotContext;
  }
  
  protected void createCC(ScrolledForm form, FormToolkit toolkit, ISelectionChangedListener listener) {
    fToolkit = toolkit;
    fScrolledForm = form;
    fScrolledForm.setText(PDEUIMessages.CommandComposerPart_formTitle);
    fCommandImage = PDEPluginImages.DESC_BUILD_VAR_OBJ.createImage();
    fScrolledForm.setImage(fCommandImage);
    Composite body = fScrolledForm.getBody();
    
    GridLayout layout = new GridLayout();
    layout.marginTop = 10;
    body.setLayout(layout);
    body.setLayoutData(new GridData(GridData.FILL_BOTH));
    
    SashForm sashForm = new SashForm(body, SWT.HORIZONTAL);
    sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
    
    fCommandList = new CommandList(this, sashForm);
    if (listener != null)
      fCommandList.addTreeSelectionListener(listener);
    
    fCommandDetails = new CommandDetails(this, sashForm);
    
    sashForm.setWeights(new int[] {4,5});
    fToolkit.adapt(sashForm, true, true);
    
    if (fPC != null)
      fCommandList.setSelection(fPC.getCommand());
    
    fPC = null;
  }
  
  protected void setMessage(String message, int newType) {
    fScrolledForm.getForm().setMessage(message, newType);
  }
  
  public FormToolkit getToolkit() {
    return fToolkit;
  }
  
  public ICommandService getCommandService() {
    return fCommandService;
  }
  
  public TagManager getTagManager() {
    return fTagManager;
  }
  
  public void setFocus() {
    fCommandList.setFocus();
  }
  
  public void dispose() {
    fCommandDetails.dispose();
    if (fCommandImage!=null) {
      fCommandImage.dispose();
      fCommandImage=null;
    }
  }
  
  protected String getSelectedCommandName() {
    return fCommandDetails.getCommandName();
  }
  protected String getSelectedSerializedString() {
    return fCommandDetails.getSerializedString();
  }
  protected HashMap getSelectedCommandsParameters() {
    return fCommandDetails.getParameters();
  }
  
  protected Composite createComposite(Composite parent) {
    return createComposite(parent, GridData.FILL_BOTH, 1, true, 0);
  }
  
  protected Composite createComposite(Composite parent, int gdStyle, int numCol, boolean colEqual, int margin) {
    Composite comp = fToolkit.createComposite(parent);
    GridLayout layout = new GridLayout(numCol, colEqual);
    layout.marginHeight = layout.marginWidth = margin;
    comp.setLayout(layout);
    comp.setLayoutData(new GridData(gdStyle));
    return comp;
  }

  public void selectionChanged(SelectionChangedEvent event) {
    // Clear the previous error message (if any)
    // Field input value is lost on selection any way
    setMessage(null, IMessageProvider.NONE);
    
    Object selectionObject = null;
    // if preselection exists use that
    if (fPC != null)
      selectionObject = fPC;
    else if (event.getSelection() instanceof IStructuredSelection)
      selectionObject = (((IStructuredSelection)event.getSelection()).getFirstElement());
    if (selectionObject != null &&
        selectionObject.equals(fCommandDetails.getCommand()))
      return;
    fCommandDetails.showDetailsFor(selectionObject);
  }

  public ParameterizedCommand getParameterizedCommand() {
    return fCommandDetails.buildParameterizedCommand();
  }
  
  protected void setPresetCommand(ParameterizedCommand pc) {
    fPC = pc;
  }
  
  protected ParameterizedCommand getPresetCommand() {
    return fPC;
  }

  /**
   * @return
   */
  public CommandList getCommandList() {
    return fCommandList;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.