1 package org.simantics.scl.ui.browser;
\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.compiler.module.repository.ModuleRepositories;
\r
20 import org.simantics.scl.compiler.types.Types;
\r
21 import org.simantics.scl.osgi.SCLOsgi;
\r
22 import org.simantics.scl.ui.Activator;
\r
24 public class SCLDefinitionSelectionDialog extends FilteredItemsSelectionDialog {
\r
25 private static final String DIALOG_SETTINGS = "SCLDefinitionSelectionDialogSettings";
\r
27 public SCLDefinitionSelectionDialog(Shell shell) {
\r
28 super(shell, false);
\r
29 setTitle("Choose an SCL definition");
\r
30 setSelectionHistory(new DefinitionSelectionHistory());
\r
31 setListLabelProvider(new LabelProvider() {
\r
33 public String getText(Object element) {
\r
34 if(element instanceof String)
\r
35 return (String)element;
\r
36 SCLValue value = (SCLValue)element;
\r
39 Name name = value.getName();
\r
40 return name.name + " (" + name.module + ") :: " + value.getType();
\r
45 private class DefinitionSelectionHistory extends SelectionHistory {
\r
46 protected Object restoreItemFromMemento(IMemento element) {
\r
47 //return element.getString("resource"); //$NON-NLS-1$
\r
50 protected void storeItemToMemento(Object item, IMemento element) {
\r
51 //element.putString("resource", item.toString()); //$NON-NLS-1$
\r
56 protected Control createExtendedContentArea(Composite parent) {
\r
60 protected IDialogSettings getDialogSettings() {
\r
61 IDialogSettings settings = Activator.getInstance().getDialogSettings().getSection(DIALOG_SETTINGS);
\r
62 if (settings == null)
\r
63 settings = Activator.getInstance().getDialogSettings().addNewSection(DIALOG_SETTINGS);
\r
68 protected IStatus validateItem(Object item) {
\r
69 return Status.OK_STATUS;
\r
73 protected ItemsFilter createFilter() {
\r
74 return new ItemsFilter() {
\r
76 String patternText = getPattern();
\r
77 patternMatcher = new SearchPattern();
\r
78 if(patternText != null && patternText.length() > 0)
\r
79 patternMatcher.setPattern(patternText);
\r
81 patternMatcher.setPattern("*");
\r
85 public boolean matchItem(Object item) {
\r
86 String text = item.toString();
\r
87 if(getPattern().contains("/"))
\r
88 return matches(text);
\r
90 int p = text.lastIndexOf('/');
\r
92 text = text.substring(p+1);
\r
93 return matches(text);
\r
98 public boolean isConsistentItem(Object item) {
\r
105 @SuppressWarnings("rawtypes")
\r
107 protected Comparator getItemsComparator() {
\r
108 return new Comparator() {
\r
109 public int compare(Object arg0, Object arg1) {
\r
110 SCLValue a = (SCLValue)arg0;
\r
111 SCLValue b = (SCLValue)arg1;
\r
112 int cmp = a.getName().name.compareTo(b.getName().name);
\r
115 return a.getName().module.compareTo(b.getName().module);
\r
121 protected void fillContentProvider(AbstractContentProvider contentProvider,
\r
122 ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
\r
123 throws CoreException {
\r
124 progressMonitor.beginTask("Searching", 1); //$NON-NLS-1$
\r
125 for(SCLValue value : ModuleRepositories.allValues(SCLOsgi.MODULE_REPOSITORY)) {
\r
126 if(isTupleValue(value.getName()))
\r
128 contentProvider.add(value, itemsFilter);
\r
130 progressMonitor.worked(1);
\r
131 progressMonitor.done();
\r
134 private boolean isTupleValue(Name name) {
\r
135 return name.module.equals(Types.BUILTIN) && name.name.startsWith("(") &&
\r
136 (name.name.equals("()") || name.name.charAt(1) == ',');
\r
140 public String getElementName(Object item) {
\r
141 return item.toString();
\r