Package org.eclipse.php.internal.debug.ui.preferences.phps

Source Code of org.eclipse.php.internal.debug.ui.preferences.phps.PHPInterpreterExecutionConfigurationBlock

/*******************************************************************************
* Copyright (c) 2009 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
*     Zend Technologies
*******************************************************************************/
package org.eclipse.php.internal.debug.ui.preferences.phps;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.php.internal.core.PHPVersion;
import org.eclipse.php.internal.debug.core.preferences.PHPexeItem;
import org.eclipse.php.internal.debug.core.preferences.PHPexes;
import org.eclipse.swt.SWT;
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.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbench;

/**
* PHP version configuration block preferences page.
*/
public class PHPInterpreterExecutionConfigurationBlock {

  private TableViewer fProfilesViewer;
  private CheckboxTableViewer fJREsViewer;

  /**
   * PHPVersion -> Default interpreter
   */
  private Map<PHPVersion, PHPexeItem> versionToDefaultItem = new HashMap<PHPVersion, PHPexeItem>();

  /**
   * PHPVersion -> Default interpreter
   */
  private Map<PHPVersion, PHPexeItem[]> versionToCompatibleItems = new HashMap<PHPVersion, PHPexeItem[]>();
  PHPexes phpExes;
  PHPexeItem[] allItems;
  /**
   * This block's control
   */
  private Composite fControl;

  public class ExecutionEnvironmentsLabelProvider extends LabelProvider {

    /**
     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
     */
    public Image getImage(Object element) {
      return DLTKPluginImages.getDescriptor(
          DLTKPluginImages.IMG_OBJS_LIBRARY).createImage();
    }

    /**
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
     */
    public String getText(Object element) {
      return ((PHPVersion) element).getAlias();
    }
  }

  /**
   * Label provider for installed PHPs table.
   */
  class PHPExeLabelProvider extends LabelProvider {

    /**
     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
     */
    public Image getImage(Object element) {
      return DLTKPluginImages.getDescriptor(
          DLTKPluginImages.IMG_OBJS_LIBRARY).createImage();
    }

    /**
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
     */
    public String getText(Object element) {
      if (element instanceof PHPexeItem) {
        final PHPexeItem phpExe = (PHPexeItem) element;
        return phpExe.getName();
      }
      return element.toString();
    }
  }

  public PHPInterpreterExecutionConfigurationBlock() {
    super();
    this.phpExes = PHPexes.getInstance();
    allItems = phpExes.getAllItems();
    versionToDefaultItem.putAll(phpExes.getDefaultItemsForPHPVersion());
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
   */
  public void init(IWorkbench workbench) {
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse
   * .swt.widgets.Composite)
   */
  protected Control createControl(Composite ancestor) {
    fControl = ancestor;
    Composite container = new Composite(ancestor, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    layout.makeColumnsEqualWidth = true;
    container.setLayout(layout);
    GridData gd = new GridData(GridData.FILL_BOTH);
    container.setLayoutData(gd);
    container.setFont(ancestor.getFont());

    Composite eeContainer = new Composite(container, SWT.NONE);
    layout = new GridLayout();
    layout.marginWidth = 0;
    eeContainer.setLayout(layout);
    eeContainer.setLayoutData(new GridData(GridData.FILL_BOTH));

    Label label = new Label(eeContainer, SWT.NONE);
    label.setFont(ancestor.getFont());
    label.setText(Messages.PHPInterpreterExecutionConfigurationBlock_0);
    label.setLayoutData(new GridData(SWT.FILL, 0, true, false));

    Table table = new Table(eeContainer, SWT.BORDER | SWT.SINGLE);
    table.setLayout(layout);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    fProfilesViewer = new TableViewer(table);
    fProfilesViewer.setContentProvider(new ArrayContentProvider());
    fProfilesViewer
        .setLabelProvider(new ExecutionEnvironmentsLabelProvider());
    fProfilesViewer.setComparator(new ViewerComparator());
    fProfilesViewer.setInput(PHPVersion.values());

    Composite jreContainer = new Composite(container, SWT.NONE);
    layout = new GridLayout();
    layout.marginWidth = 0;
    jreContainer.setLayout(layout);
    jreContainer.setLayoutData(new GridData(GridData.FILL_BOTH));

    label = new Label(jreContainer, SWT.NONE);
    label.setFont(ancestor.getFont());
    label.setText(Messages.PHPInterpreterExecutionConfigurationBlock_1);
    label.setLayoutData(new GridData(SWT.FILL, 0, true, false));

    table = new Table(jreContainer, SWT.CHECK | SWT.BORDER | SWT.SINGLE);
    table.setLayout(layout);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    fJREsViewer = new CheckboxTableViewer(table);
    fJREsViewer.setContentProvider(new ArrayContentProvider());
    fJREsViewer.setLabelProvider(new PHPExeLabelProvider());
    fJREsViewer.setInput(new PHPexeItem[0]);

    fProfilesViewer
        .addSelectionChangedListener(new ISelectionChangedListener() {
          public void selectionChanged(SelectionChangedEvent event) {
            PHPVersion version = (PHPVersion) ((IStructuredSelection) event
                .getSelection()).getFirstElement();
            PHPexeItem jre = versionToDefaultItem.get(version);
            fJREsViewer.setInput(getCompatibleItems(allItems,
                version));
            if (jre != null) {
              fJREsViewer
                  .setCheckedElements(new Object[] { jre });
            } else {
              fJREsViewer.setCheckedElements(new Object[0]);
            }
          }

        });

    fJREsViewer.addCheckStateListener(new ICheckStateListener() {
      public void checkStateChanged(CheckStateChangedEvent event) {
        if (event.getChecked()) {
          Object element = event.getElement();
          versionToDefaultItem
              .put(
                  (PHPVersion) ((IStructuredSelection) fProfilesViewer
                      .getSelection()).getFirstElement(),
                  (PHPexeItem) element);
          fJREsViewer.setCheckedElements(new Object[] { element });
        } else {
          versionToDefaultItem.remove(fJREsViewer.getInput());
        }

      }
    });

    Dialog.applyDialogFont(ancestor);
    return ancestor;
  }

  private PHPexeItem[] getCompatibleItems(PHPexeItem[] allItems,
      PHPVersion version) {
    String versionNumber = version.getAlias().substring(3);
    PHPexeItem[] result = versionToCompatibleItems.get(version);
    if (result == null) {
      result = phpExes.getCompatibleItems(allItems, version);
      versionToCompatibleItems.put(version, result);
    }
    return result;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.preference.IPreferencePage#performOk()
   */
  public boolean performOk() {
    for (Iterator<PHPVersion> iterator = versionToDefaultItem.keySet()
        .iterator(); iterator.hasNext();) {
      PHPVersion version = iterator.next();
      phpExes.setItemDefaultForPHPVersion(versionToDefaultItem
          .get(version), version);
    }
    phpExes.save();
    return true;
  }

  public Control getControl() {
    return fControl;
  }

}
TOP

Related Classes of org.eclipse.php.internal.debug.ui.preferences.phps.PHPInterpreterExecutionConfigurationBlock

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.