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