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