package org.craftyourmod.mineclipse.ui.dialogs; import java.io.File; import java.util.ArrayList; import java.util.Comparator; import org.craftyourmod.mineclipse.ui.Activator; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog; public class MinecraftFileSelectionDialog extends FilteredItemsSelectionDialog { private final class MinecraftFileLabelProvider implements ILabelProvider { @Override public void removeListener(final ILabelProviderListener listener) { } @Override public boolean isLabelProperty(final Object element, final String property) { return false; } @Override public void dispose() { } @Override public void addListener(final ILabelProviderListener listener) { } @Override public String getText(final Object element) { if (element instanceof File) { File f = (File) element; return f.getName(); } return "UNKNOWN"; //$NON-NLS-1$ } @Override public Image getImage(final Object element) { if (element instanceof File) { File f = (File) element; Image img = PlatformUI.getWorkbench().getEditorRegistry() .getImageDescriptor(f.getAbsolutePath()).createImage(); return img; } return null; } } private static ArrayList<File> resources = new ArrayList<File>(); public MinecraftFileSelectionDialog(final Shell shell, final IStructuredSelection selection) { super(shell); IProject pj = getSelectedProject(selection); IFolder fClient = pj.getFolder("minecraft/net/minecraft/client"); //$NON-NLS-1$ for (File f : fClient.getRawLocation().toFile().listFiles()) resources.add(f); IFolder fServer = pj.getFolder("minecraft/net/minecraft/server"); //$NON-NLS-1$ for (File f : fServer.getRawLocation().toFile().listFiles()) resources.add(f); IFolder fSrc = pj.getFolder("minecraft/net/minecraft/src"); //$NON-NLS-1$ for (File f : fSrc.getRawLocation().toFile().listFiles()) if (f.getName().endsWith(".java")) //$NON-NLS-1$ resources.add(f); setInitialPattern("*.*"); //$NON-NLS-1$ final MinecraftFileLabelProvider listLabelProvider = new MinecraftFileLabelProvider(); setListLabelProvider(listLabelProvider); setDetailsLabelProvider(listLabelProvider); setDialogHelpAvailable(false); } @Override protected Control createExtendedContentArea(final Composite parent) { return null; } private static final String DIALOG_SETTINGS = "MinecraftFileSelectionDialog"; //$NON-NLS-1$ @Override protected IDialogSettings getDialogSettings() { IDialogSettings settings = Activator.getDefault().getDialogSettings() .getSection(DIALOG_SETTINGS); if (settings == null) settings = Activator.getDefault().getDialogSettings() .addNewSection(DIALOG_SETTINGS); return settings; } @Override protected IStatus validateItem(final Object item) { return Status.OK_STATUS; } @Override protected ItemsFilter createFilter() { return new ItemsFilter() { @Override public boolean matchItem(final Object item) { return matches(((File) item).getName()); } @Override public boolean isConsistentItem(final Object item) { return true; } }; } @Override protected Comparator<?> getItemsComparator() { return new Comparator<Object>() { @Override public int compare(final Object arg0, final Object arg1) { return arg0.toString().compareTo(arg1.toString()); } }; } @Override protected void fillContentProvider( final AbstractContentProvider contentProvider, final ItemsFilter itemsFilter, final IProgressMonitor progressMonitor) throws CoreException { progressMonitor.beginTask("Searching", resources.size()); //$NON-NLS-1$ for (Object element : resources) { contentProvider.add(element, itemsFilter); progressMonitor.worked(1); } progressMonitor.done(); } @Override public String getElementName(final Object item) { return ((File) item).getName(); } public IProject getSelectedProject(final IStructuredSelection selection) { ISelection sel = selection; Object selectedObject = sel; if (sel instanceof IStructuredSelection) selectedObject = ((IStructuredSelection) sel).getFirstElement(); if (selectedObject instanceof IAdaptable) { IResource res = (IResource) ((IAdaptable) selectedObject) .getAdapter(IResource.class); IProject project = res.getProject(); return project; } return null; } }