Package org.testng.eclipse.ui.util

Source Code of org.testng.eclipse.ui.util.FolderSelectionDialog

package org.testng.eclipse.ui.util;


import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.dialogs.SelectionStatusDialog;


/**
* Class usage XXX
*
* @version $Revision$
*/
public class FolderSelectionDialog extends SelectionStatusDialog {
  protected CheckboxTreeViewer m_viewer;
  protected ILabelProvider m_labelProvider;
  protected ITreeContentProvider m_contentProvider;
  protected Object m_rootInput;

  protected Set m_selection;
  protected List m_filters;
  protected Object m_focusedElement;

  public FolderSelectionDialogShell parentShell,
                      ILabelProvider labelProvider,
                      ITreeContentProvider contentProvider) {
    super(parentShell);

    m_labelProvider = labelProvider;
    m_contentProvider = contentProvider;

    setSelectionResult(null);
    setStatusLineAboveButtons(true);

    setShellStyle(getShellStyle() | SWT.MAX | SWT.RESIZE);

    m_filters = null;
    m_focusedElement = null;
  }

  /**
   * Sets the tree input.
   * @param input the tree input.
   */
  public void setInput(Object input) {
    m_rootInput = input;
  }

 
  /**
   * @see org.eclipse.ui.dialogs.SelectionDialog#setInitialSelections(java.lang.Object[])
   */
  public void setInitialSelections(Object[] selectedElements) {
    super.setInitialSelections(selectedElements);
   
    m_selection = new HashSet();
    for(int i = 0; i < selectedElements.length; i++) {
      m_selection.add(selectedElements[i]);
    }
  }
 
  /**
   * Adds a filter to the tree viewer.
   * @param filter a filter.
   */
  public void addFilter(ViewerFilter filter) {
    if(null == m_filters) {
      m_filters = new ArrayList(4);
    }

    m_filters.add(filter);
  }

  /**
   * Handles cancel button pressed event.
   */
  protected void cancelPressed() {
    setSelectionResult(null);
    super.cancelPressed();
  }

  private void access$superCreate() {
    super.create();
  }

  /**
   * @see Window#create()
   */
  public void create() {
    BusyIndicator.showWhile(null, new Runnable() {
      public void run() {
        access$superCreate();

        List initialSelection = getInitialElementSelections();
        m_viewer.setCheckedElements(initialSelection.toArray());
        m_viewer.expandToLevel(2);

        if(null != initialSelection) {
          for(Iterator iter = initialSelection.iterator(); iter.hasNext();) {
            m_viewer.reveal(iter.next());
          }
        }

        updateOKStatus();
      }
    });
  }

  protected void updateOKStatus() {
    computeResult();

    if(null != getResult()) {
      updateStatus(new StatusInfo());
    } else {
      updateStatus(new StatusInfo(IStatus.ERROR, "")); //$NON-NLS-1$
    }
  }

  /**
   * Creates the tree viewer.
   *
   * @param parent the parent composite
   * @return the tree viewer
   */
  protected CheckboxTreeViewer createTreeViewer(Composite parent) {
    m_viewer = new CheckboxTreeViewer(parent, SWT.BORDER);

    m_viewer.setContentProvider(m_contentProvider);
    m_viewer.setLabelProvider(m_labelProvider);

    //     m_viewer.setSorter(new ResourceSorter(ResourceSorter.NAME));

    if(null != m_filters) {
      for(int i = 0; i != m_filters.size(); i++)
        m_viewer.addFilter((ViewerFilter) m_filters.get(i));
    }

    m_viewer.setInput(m_rootInput);

    return m_viewer;
  }

  /**
   * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
   */
  protected Control createDialogArea(Composite parent) {
    Composite composite = (Composite) super.createDialogArea(parent);

    createMessageArea(composite);
    final CheckboxTreeViewer treeViewer = createTreeViewer(composite);

    GridData data = new GridData(GridData.FILL_BOTH);
    data.widthHint = convertWidthInCharsToPixels(60);
    data.heightHint = convertHeightInCharsToPixels(18);

    Tree treeWidget = treeViewer.getTree();
    treeWidget.setLayoutData(data);
    treeWidget.setFont(composite.getFont());

    if(null != m_selection) {
      for(Iterator iter = m_selection.iterator(); iter.hasNext();) {
        treeViewer.setSubtreeChecked(iter.next(), true);
      }
    }

    if(null != m_focusedElement) {
      treeViewer.setSelection(new StructuredSelection(m_focusedElement), true);
    }

    treeViewer.addCheckStateListener(new ICheckStateListener() {
      public void checkStateChanged(CheckStateChangedEvent event) {
        Object element = event.getElement();
        boolean add = event.getChecked();
       
        if(add) {
          m_selection.add(element);
        } else {
          m_selection.remove(element);
        }
       
        treeViewer.setSubtreeChecked(element, add);
        updateOKStatus();
      }
    });

    applyDialogFont(composite);
   
    return composite;
  }

  /**
   * @see org.eclipse.ui.dialogs.SelectionStatusDialog#computeResult()
   */
  protected void computeResult() {
    setSelectionResult(m_selection.toArray());
  }

  public void setInitialFocus(Object focusElement) {
    m_focusedElement = focusElement;
  }
}
TOP

Related Classes of org.testng.eclipse.ui.util.FolderSelectionDialog

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.