diff options
Diffstat (limited to 'bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialog.java')
-rw-r--r-- | bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialog.java | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialog.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialog.java deleted file mode 100644 index a054c2c7..00000000 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/dialogs/AbstractIconDialog.java +++ /dev/null @@ -1,299 +0,0 @@ -package org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import org.eclipse.core.databinding.observable.list.IObservableList; -import org.eclipse.core.databinding.observable.list.WritableList; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceVisitor; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.e4.tools.emf.ui.internal.StringMatcher; -import org.eclipse.e4.ui.model.application.MApplicationElement; -import org.eclipse.emf.common.command.Command; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.edit.command.SetCommand; -import org.eclipse.emf.edit.domain.EditingDomain; -import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; -import org.eclipse.jface.dialogs.TitleAreaDialog; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StyledCellLabelProvider; -import org.eclipse.jface.viewers.StyledString; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.ViewerCell; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -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.Shell; -import org.eclipse.swt.widgets.Text; - -public abstract class AbstractIconDialog extends TitleAreaDialog { - private TableViewer viewer; - private IProject project; - private MApplicationElement element; - private EStructuralFeature feature; - private EditingDomain editingDomain; - private Map<IFile, Image> icons = Collections.synchronizedMap(new HashMap<IFile, Image>()); - - public AbstractIconDialog(Shell parentShell, IProject project, EditingDomain editingDomain, MApplicationElement element, EStructuralFeature feature) { - super(parentShell); - this.editingDomain = editingDomain; - this.element = element; - this.feature = feature; - this.project = project; - } - - protected abstract String getShellTitle(); - - protected abstract String getDialogTitle(); - - protected abstract String getDialogMessage(); - - @Override - protected Control createDialogArea(Composite parent) { - Composite comp = (Composite) super.createDialogArea(parent); - - getShell().setText(getShellTitle()); - setTitle(getDialogTitle()); - setMessage(getDialogMessage()); - - Composite container = new Composite(comp, SWT.NONE); - container.setLayoutData(new GridData(GridData.FILL_BOTH)); - container.setLayout(new GridLayout(2, false)); - - Label l = new Label(container, SWT.NONE); - l.setText("IconName"); - - final Text t = new Text(container, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH); - t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - new Label(container, SWT.NONE); - - viewer = new TableViewer(container); - GridData gd = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(gd); - viewer.setContentProvider(new ObservableListContentProvider()); - viewer.setLabelProvider(new StyledCellLabelProvider() { - @Override - public void update(ViewerCell cell) { - IFile file = (IFile) cell.getElement(); - StyledString styledString = new StyledString(file.getProjectRelativePath().toString(), null); - - Image img = icons.get(file); - if (img == null) { - InputStream in = null; - try { - in = file.getContents(); - img = new Image(cell.getControl().getDisplay(), in); - icons.put(file, img); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - - String bundle = getBundle(file); - if( bundle != null ) { - styledString.append(" - " + bundle, StyledString.DECORATIONS_STYLER); //$NON-NLS-1$ - } - - cell.setImage(img); - cell.setText(styledString.getString()); - cell.setStyleRanges(styledString.getStyleRanges()); - } - }); - - final WritableList list = new WritableList(); - viewer.setInput(list); - viewer.addDoubleClickListener(new IDoubleClickListener() { - - public void doubleClick(DoubleClickEvent event) { - okPressed(); - } - }); - - t.addModifyListener(new ModifyListener() { - private IconMatchCallback callback; - private Timer timer = new Timer(true); - private TimerTask task; - - public void modifyText(ModifyEvent e) { - if (callback != null) { - callback.cancel = true; - } - if (task != null) { - task.cancel(); - } - list.clear(); - - clearImages(); - - callback = new IconMatchCallback(list); - task = new SearchThread(callback, t.getText(), project); - timer.schedule(task, 500); - } - }); - - getShell().addDisposeListener(new DisposeListener() { - - public void widgetDisposed(DisposeEvent e) { - clearImages(); - } - }); - - return comp; - } - - private void clearImages() { - for (Image img : icons.values()) { - img.dispose(); - } - icons.clear(); - } - - @Override - protected void okPressed() { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if( ! s.isEmpty() ) { - IFile file = (IFile) s.getFirstElement(); - String bundle = getBundle(file); - String uri = "platform:/plugin/"+bundle+"/"+file.getProjectRelativePath().toString(); - Command cmd = SetCommand.create(editingDomain, element, feature, uri); - if( cmd.canExecute() ) { - editingDomain.getCommandStack().execute(cmd); - super.okPressed(); - } - } - } - - private String getBundle(IFile file) { - IProject project = file.getProject(); - IFile f = project.getFile("/META-INF/MANIFEST.MF"); //$NON-NLS-1$ - - if (f != null && f.exists()) { - BufferedReader r = null; - try { - InputStream s = f.getContents(); - r = new BufferedReader(new InputStreamReader(s)); - String line; - while ((line = r.readLine()) != null) { - if (line.startsWith("Bundle-SymbolicName:")) { //$NON-NLS-1$ - int start = line.indexOf(':'); - int end = line.indexOf(';'); - if (end == -1) { - end = line.length(); - } - return line.substring(start + 1, end).trim(); - } - } - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } finally { - if (r != null) { - try { - r.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - return null; - } - - private class IconMatchCallback { - private volatile boolean cancel; - private IObservableList list; - - private IconMatchCallback(IObservableList list) { - this.list = list; - } - - public void match(final IFile file) { - if (!cancel) { - list.getRealm().exec(new Runnable() { - - public void run() { - list.add(file); - } - }); - } - } - } - - private static class SearchThread extends TimerTask { - private final IconMatchCallback callback; - private final IProject project; - private final StringMatcher matcherGif; - private final StringMatcher matcherJpg; - private final StringMatcher matcherPng; - - public SearchThread(IconMatchCallback callback, String pattern, IProject project) { - this.matcherGif = new StringMatcher("*" + pattern + "*.gif", true, false); //$NON-NLS-1$//$NON-NLS-2$ - this.matcherJpg = new StringMatcher("*" + pattern + "*.jpg", true, false); //$NON-NLS-1$//$NON-NLS-2$ - this.matcherPng = new StringMatcher("*" + pattern + "*.png", true, false); //$NON-NLS-1$//$NON-NLS-2$ - this.callback = callback; - this.project = project; - } - - @Override - public void run() { - try { - project.accept(new IResourceVisitor() { - - public boolean visit(IResource resource) throws CoreException { - if (callback.cancel) { - return false; - } - - if (resource.getType() == IResource.FOLDER || resource.getType() == IResource.PROJECT) { - return true; - } else if (resource.getType() == IResource.FILE && !resource.isLinked()) { - String path = resource.getProjectRelativePath().toString(); - if (matcherGif.match(path) || matcherPng.match(path) || matcherJpg.match(path)) { - callback.match((IFile) resource); - } - } - return false; - } - - }); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } -} |