1 package org.simantics.scl.ui.editor2;
3 import java.util.Comparator;
5 import org.eclipse.core.runtime.CoreException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.jface.dialogs.IDialogSettings;
10 import org.eclipse.jface.viewers.LabelProvider;
11 import org.eclipse.swt.widgets.Composite;
12 import org.eclipse.swt.widgets.Control;
13 import org.eclipse.swt.widgets.Shell;
14 import org.eclipse.ui.IMemento;
15 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
16 import org.eclipse.ui.dialogs.SearchPattern;
17 import org.simantics.scl.compiler.common.names.Name;
18 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
19 import org.simantics.scl.osgi.SCLOsgi;
20 import org.simantics.scl.ui.Activator;
22 import gnu.trove.procedure.TObjectProcedure;
24 public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {
25 private static final String DIALOG_SETTINGS = "SCLModuleSelectionDialogSettings";
27 public SCLModuleSelectionDialog(Shell shell) {
29 setTitle("Choose an SCL module");
30 setSelectionHistory(new ModuleSelectionHistory());
31 setListLabelProvider(new LabelProvider() {
33 public String getText(Object element) {
36 return (String)element;
41 private class ModuleSelectionHistory extends SelectionHistory {
42 protected Object restoreItemFromMemento(IMemento element) {
43 //return element.getString("resource"); //$NON-NLS-1$
46 protected void storeItemToMemento(Object item, IMemento element) {
47 //element.putString("resource", item.toString()); //$NON-NLS-1$
52 protected Control createExtendedContentArea(Composite parent) {
56 protected IDialogSettings getDialogSettings() {
57 IDialogSettings settings = Activator.getInstance().getDialogSettings().getSection(DIALOG_SETTINGS);
59 settings = Activator.getInstance().getDialogSettings().addNewSection(DIALOG_SETTINGS);
64 protected IStatus validateItem(Object item) {
65 return Status.OK_STATUS;
69 protected ItemsFilter createFilter() {
70 return new ItemsFilter() {
72 String patternText = getPattern();
73 patternMatcher = new SearchPattern();
74 if(patternText != null && patternText.length() > 0)
75 patternMatcher.setPattern(patternText);
77 patternMatcher.setPattern("*");
81 public boolean matchItem(Object item) {
82 String text = item.toString();
83 if(getPattern().contains("/"))
86 int p = text.lastIndexOf('/');
88 text = text.substring(p+1);
94 public boolean isConsistentItem(Object item) {
101 @SuppressWarnings("rawtypes")
103 protected Comparator getItemsComparator() {
104 return new Comparator() {
105 public int compare(Object arg0, Object arg1) {
106 String a = (String)arg0;
107 String b = (String)arg1;
108 return a.compareTo(b);
114 protected void fillContentProvider(AbstractContentProvider contentProvider,
115 ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
116 throws CoreException {
117 progressMonitor.beginTask("Searching", 1); //$NON-NLS-1$
118 SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
120 public boolean execute(String moduleName) {
121 contentProvider.add(moduleName, itemsFilter);
125 progressMonitor.worked(1);
126 progressMonitor.done();
130 public String getElementName(Object item) {
131 return item.toString();