Package org.dyno.visual.swing.types

Source Code of org.dyno.visual.swing.types.ImageSelectionDialog

package org.dyno.visual.swing.types;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

import org.dyno.visual.swing.VisualSwingPlugin;
import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;

public class ImageSelectionDialog extends Dialog {
  private TreeViewer view;
  private Label label;

  private class ProjectTreeContent implements ITreeContentProvider {
   
    public Object[] getChildren(Object parentElement) {
      try {
        if (parentElement instanceof IJavaProject) {
          IJavaProject prj = (IJavaProject) parentElement;
          IJavaElement[] children = prj.getChildren();
          List<Object> list = new ArrayList<Object>();
          for (IJavaElement jElement : children) {
            if (jElement instanceof IPackageFragmentRoot) {
              IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot) jElement;
              if (!pkgRoot.isArchive())
                list.add(jElement);
            }
          }
          return list.toArray();
        } else if (parentElement instanceof IPackageFragmentRoot) {
          IPackageFragmentRoot packageRoot = (IPackageFragmentRoot) parentElement;
          IJavaElement[] children = packageRoot.getChildren();
          Object[]nonJavaResources=packageRoot.getNonJavaResources();
          List<Object>list = new ArrayList<Object>();
          if(children!=null){
            for(Object child:children){
              list.add(child);
            }
          }
          if(nonJavaResources!=null){
            for(Object resource:nonJavaResources){
              if(resource instanceof IFile){
                IFile file = (IFile)resource;
                String name = file.getName();
                name=name.toLowerCase();
                if(name.endsWith(".png")||name.endsWith(".gif")||name.endsWith(".jpg")){
                  list.add(file);
                }
              }
            }
          }
          return list.toArray();         
        } else if (parentElement instanceof IPackageFragment) {
          IPackageFragment pkg = (IPackageFragment) parentElement;
          Object[] nonJavaResources = pkg.getNonJavaResources();
          List<Object> list = new ArrayList<Object>();
          for (Object resource : nonJavaResources) {
            if (resource instanceof IFile) {
              IFile file = (IFile) resource;
              String name = file.getName();
              if (name != null) {
                name = name.toLowerCase();
                if (name.endsWith(".gif")
                    || name.endsWith(".png")
                    || name.endsWith(".jpg")) {
                  list.add(file);
                }
              }
            }
          }
          return list.toArray();
        }
      } catch (Exception e) {
        VisualSwingPlugin.getLogger().error(e);
      }
      return new Object[0];
    }

   
    public Object getParent(Object element) {
      return null;
    }

   
    public boolean hasChildren(Object element) {
      try {
        IJavaElement[] children = null;
        if (element instanceof IPackageFragmentRoot) {
          IPackageFragmentRoot packageRoot = (IPackageFragmentRoot) element;
          children = packageRoot.getChildren();
          Object[]nonJavaResources=packageRoot.getNonJavaResources();
          List<Object>list = new ArrayList<Object>();
          if(children!=null){
            for(Object child:children){
              list.add(child);
            }
          }
          if(nonJavaResources!=null){
            for(Object resource:nonJavaResources){
              if(resource instanceof IFile){
                IFile file = (IFile)resource;
                String name = file.getName();
                name=name.toLowerCase();
                if(name.endsWith(".png")||name.endsWith(".gif")||name.endsWith(".jpg")){
                  list.add(file);
                }
              }
            }
          }
          return !list.isEmpty();
        } else if (element instanceof IPackageFragment) {
          IPackageFragment pkg = (IPackageFragment) element;
          Object[] nonJavaResources = pkg.getNonJavaResources();
          for (Object resource : nonJavaResources) {
            if (resource instanceof IFile) {
              IFile file = (IFile) resource;
              String name = file.getName();
              if (name != null) {
                name = name.toLowerCase();
                if (name.endsWith(".gif")
                    || name.endsWith(".png")
                    || name.endsWith(".jpg")) {
                  return true;
                }
              }
            }
          }
          return false;
        }
        return children != null && children.length > 0;
      } catch (Exception e) {
        VisualSwingPlugin.getLogger().error(e);
      }
      return false;
    }

   
    public Object[] getElements(Object inputElement) {
      return getChildren(inputElement);
    }

   
    public void dispose() {
    }

   
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }

  }

  class ProjectLabelProvider extends LabelProvider implements ILabelProvider {
   
    public Image getImage(Object element) {
      if (element == null)
        return null;
      if (element instanceof IPackageFragmentRoot) {
        return JavaUI.getSharedImages().getImage(
            ISharedImages.IMG_OBJS_PACKFRAG_ROOT);
      } else if (element instanceof IPackageFragment) {
        return JavaUI.getSharedImages().getImage(
            ISharedImages.IMG_OBJS_PACKAGE);
      } else if (element instanceof IFile) {
        return PlatformUI.getWorkbench().getSharedImages().getImage(
            org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
      }
      return null;
    }

   
    public String getText(Object element) {
      if (element == null)
        return "";
      if (element instanceof IJavaElement) {
        IJavaElement java = (IJavaElement) element;
        String name = java.getElementName();
        if (name == null || name.trim().length() == 0) {
          if (java instanceof IPackageFragment) {
            return "(default package)";
          }
        }
        return name;
      } else if (element instanceof IFile) {
        IFile file = (IFile) element;
        String name = file.getName();
        return name;
      }
      return element.toString();
    }

   
    public void dispose() {
    }
  }

  protected ImageSelectionDialog(Shell parentShell) {
    super(parentShell);
  }

 
  protected Control createDialogArea(Composite parent) {
    getShell().setText("Select image");
    Composite area = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    area.setLayout(layout);
    view = new TreeViewer(area, SWT.BORDER);
    GridData data = new GridData();
    data.widthHint = 350;
    data.heightHint = 200;
    view.getTree().setLayoutData(data);
    view.setUseHashlookup(true);
    view.setContentProvider(new ProjectTreeContent());
    view.setLabelProvider(new ProjectLabelProvider());
    view.setInput(VisualSwingPlugin.getCurrentProject());
    view.addSelectionChangedListener(new ISelectionChangedListener() {
     
      public void selectionChanged(SelectionChangedEvent event) {
        view_selectionChanged(event);
      }
    });
    Group group = new Group(area, SWT.NONE);
    group.setText("Preview");
    group.setLayout(new FillLayout());
    data = new GridData();
    data.grabExcessHorizontalSpace = true;
    data.horizontalAlignment = SWT.FILL;
    data.heightHint = 50;
    group.setLayoutData(data);
    label = new Label(group, SWT.CENTER);
    return parent;
  }

  private boolean buildPath(Object target, Object root, Stack<Object> stack) {
    stack.push(root);
    if (root.equals(target)) {
      return true;
    }
    ITreeContentProvider provider = (ITreeContentProvider) view
        .getContentProvider();
    Object[] children = provider.getChildren(root);
    for (Object child : children) {
      if (buildPath(target, child, stack))
        return true;
    }
    stack.pop();
    return false;
  }

 
  protected Control createContents(Composite parent) {
    Control ctrl = super.createContents(parent);
    if (imgFile != null) {
      IJavaProject prj = VisualSwingPlugin.getCurrentProject();
      Stack<Object> stack = new Stack<Object>();
      if (buildPath(imgFile, prj, stack)) {
        TreePath path = new TreePath(stack.toArray());
        view.expandToLevel(path, 0);
        view.expandAll();
        view.setSelection(new StructuredSelection(imgFile));
      }
    }
    return ctrl;
  }

  private void view_selectionChanged(SelectionChangedEvent event) {
    TreeSelection sel = (TreeSelection) event.getSelection();
    Object selected = sel.getFirstElement();
    if (selected != null) {
      if (selected instanceof IFile) {
        IFile file = (IFile) selected;
        String name = file.getName();
        name = name.toLowerCase();
        if (name.endsWith(".png") || name.endsWith(".gif")
            || name.endsWith(".jpg")) {
          getButton(IDialogConstants.OK_ID).setEnabled(true);
          this.imgFile = file;
          updatePicture();
          return;
        }
      }
    }
    Button btn = getButton(IDialogConstants.OK_ID);
    if (btn != null)
      btn.setEnabled(false);
  }

  private Image image;

  private void updatePicture() {
    if (imgFile != null) {
      try {
        ImageDescriptor d = ImageDescriptor.createFromURL(imgFile
            .getLocationURI().toURL());
        if (image != null)
          image.dispose();
        image = d.createImage();
        label.setImage(image);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

 
  public boolean close() {
    if (image != null)
      image.dispose();
    return super.close();
  }

 
  protected void cancelPressed() {
    imgFile = null;
    super.cancelPressed();
  }

  public IFile getImageFile() {
    return imgFile;
  }

  public void setImageFile(IFile file) {
    this.imgFile = file;
  }

  private IFile imgFile;
}
TOP

Related Classes of org.dyno.visual.swing.types.ImageSelectionDialog

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.