Package tool.search

Source Code of tool.search.FindTypeDialog

package tool.search;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.List;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Point;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.forms.widgets.FormToolkit;

import tool.model.ToolAttribute;
import tool.model.ToolClass;
import tool.model.ToolComponent;
import tool.model.ToolVirtualAttribute;
import tool.navigator.common.LabelProvider;

public class FindTypeDialog extends Dialog {
  private DataBindingContext m_bindingContext;
  private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
  private Text typeText;
  private ISelection selection;
  private String typeName;
  private IProject project;

  protected PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
      this);
  private TreeViewer treeViewer;
  private ToolComponent selectedClass;
 
  public void addPropertyChangeListener(String propertyName,
      PropertyChangeListener listener) {
    propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
  }

  public void removePropertyChangeListener(PropertyChangeListener listener) {
    propertyChangeSupport.removePropertyChangeListener(listener);
  }
  public static ToolComponent show(IProject project, ISelection selection){
    ToolComponent cls = null;
    Shell shell = Display.getDefault().getActiveShell();
    FindTypeDialog dialog = new FindTypeDialog(shell, project, selection);
    int option = dialog.open();
    cls = dialog.selectedClass;
    return cls;
  }

  /**
   * @param project
   * @wbp.parser.constructor
   */
  private FindTypeDialog(Shell parentShell, IProject project, ISelection selection) {
    super(parentShell);
    this.selection = selection;
    this.project = project;
   
    if (this.selection != null && this.selection instanceof TextSelection){
      TextSelection ts = (TextSelection)this.selection;
      this.setTypeName(ts.getText());
     
    } else if (this.selection != null && this.selection instanceof TreeSelection){
      TreeSelection ts = (TreeSelection)this.selection;
      Object element = ts.getFirstElement();
      if (element instanceof ToolAttribute){
        this.setTypeName(((ToolAttribute)element).getType());
      } else if (element instanceof ToolVirtualAttribute){
        this.setTypeName(((ToolAttribute)element).getType());
      } else {
        this.setTypeName(ts.getFirstElement().toString());
      }
    }
  }
  /**
   * Create the dialog.
   * @param parentShell
   */
  public FindTypeDialog(Shell parentShell) {
    super(parentShell);
    setShellStyle(SWT.RESIZE);
  }

  /**
   * Create contents of the dialog.
   * @param parent
   */
  @Override
  protected Control createDialogArea(Composite parent) {
    Composite container = (Composite) super.createDialogArea(parent);
    container.setLayout(new GridLayout(1, false));
   
    Label lblType = new Label(container, SWT.NONE);
    lblType.setText("Type");
   
    typeText = new Text(container, SWT.BORDER);
    typeText.addFocusListener(new FocusAdapter() {
      @Override
      public void focusLost(FocusEvent e) {
        List<ToolClass> results = ToolClass.find(project, typeName);
        treeViewer.setInput(results);
      }
    });
    typeText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent event) {
        typeName = typeText.getText();
      }
    });
    typeText.setText(this.typeName);
    typeText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
   
    Label lblResults = new Label(container, SWT.NONE);
    lblResults.setText("Results");
   
    treeViewer = new TreeViewer(container, SWT.BORDER);
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
      public void selectionChanged(SelectionChangedEvent event) {
        selectedClass = (ToolComponent) ((TreeSelection)event.getSelection()).getFirstElement();
      }
    });
    treeViewer.setSorter(new ViewerSorter());
    Tree resultsTree = treeViewer.getTree();
    resultsTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    treeViewer.setContentProvider(new ITreeContentProvider() {
     
      @Override
      public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
       
      }
     
      @Override
      public void dispose() {
       
      }
     
      @Override
      public boolean hasChildren(Object object) {
        return false;
      }
     
      @Override
      public Object getParent(Object object) {
        return null;
      }
     
      @Override
      public Object[] getElements(Object parent) {
        if (parent instanceof List){
          return ((List<ToolClass>)parent).toArray();
        }
        return null;
      }
     
      @SuppressWarnings("unchecked")
      @Override
      public Object[] getChildren(Object parent) {
        if (parent instanceof List){
          return ((List<ToolClass>)parent).toArray();
        }
        return null;
      }
    });
    treeViewer.setLabelProvider(new LabelProvider(LabelProvider.FULL_PATH)) ;
    treeViewer.setAutoExpandLevel(1);

    return container;
  }

  /**
   * Create contents of the button bar.
   * @param parent
   */
  @Override
  protected void createButtonsForButtonBar(Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
        true);
    createButton(parent, IDialogConstants.CANCEL_ID,
        IDialogConstants.CANCEL_LABEL, false);
    m_bindingContext = initDataBindings();
  }

  /**
   * Return the initial size of the dialog.
   */
  @Override
  protected Point getInitialSize() {
    return new Point(450, 300);
  }
  public String getTypeName() {
    return typeName;
  }
  public void setTypeName(String typeName) {
    propertyChangeSupport.firePropertyChange("typeName", this.typeName,
        this.typeName = typeName);
    if (typeText!=null){
      typeText.setText(typeName);
    }
  }
  protected DataBindingContext initDataBindings() {
    DataBindingContext bindingContext = new DataBindingContext();
    //
    return bindingContext;
  }
}
TOP

Related Classes of tool.search.FindTypeDialog

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.