]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/browser/SCLDefinitionSelectionDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / browser / SCLDefinitionSelectionDialog.java
1 package org.simantics.scl.ui.browser;\r
2 \r
3 import java.util.Comparator;\r
4 \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
23 \r
24 public class SCLDefinitionSelectionDialog extends FilteredItemsSelectionDialog {\r
25     private static final String DIALOG_SETTINGS = "SCLDefinitionSelectionDialogSettings";\r
26 \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
32             @Override\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
37                 if(element == null)\r
38                     return "";\r
39                 Name name = value.getName();\r
40                 return name.name + " (" + name.module + ") :: " + value.getType();\r
41             }\r
42         });\r
43     }\r
44 \r
45     private class DefinitionSelectionHistory extends SelectionHistory {\r
46         protected Object restoreItemFromMemento(IMemento element) {\r
47             //return element.getString("resource"); //$NON-NLS-1$\r
48             return null;\r
49         }\r
50         protected void storeItemToMemento(Object item, IMemento element) {\r
51             //element.putString("resource", item.toString()); //$NON-NLS-1$\r
52         }\r
53     }\r
54 \r
55     @Override\r
56     protected Control createExtendedContentArea(Composite parent) {\r
57         return null;\r
58     }\r
59 \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
64          return settings;\r
65     }\r
66 \r
67     @Override\r
68     protected IStatus validateItem(Object item) {\r
69         return Status.OK_STATUS;\r
70     }\r
71 \r
72     @Override\r
73     protected ItemsFilter createFilter() {\r
74         return new ItemsFilter() {\r
75             {\r
76                 String patternText = getPattern();\r
77                 patternMatcher = new SearchPattern();\r
78                 if(patternText != null && patternText.length() > 0)\r
79                     patternMatcher.setPattern(patternText);\r
80                 else \r
81                     patternMatcher.setPattern("*");\r
82             }\r
83             \r
84             @Override\r
85             public boolean matchItem(Object item) {\r
86                 String text = item.toString();\r
87                 if(getPattern().contains("/"))\r
88                     return matches(text);\r
89                 else {\r
90                     int p = text.lastIndexOf('/');\r
91                     if(p >= 0)\r
92                         text = text.substring(p+1);\r
93                     return matches(text);\r
94                 }\r
95             }\r
96 \r
97             @Override\r
98             public boolean isConsistentItem(Object item) {\r
99                 return true;\r
100             }\r
101             \r
102         };\r
103     }\r
104 \r
105     @SuppressWarnings("rawtypes")\r
106     @Override\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
113                 if(cmp != 0)\r
114                     return cmp;\r
115                 return a.getName().module.compareTo(b.getName().module);\r
116             }\r
117         };\r
118     }\r
119 \r
120     @Override\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
127                 continue;\r
128             contentProvider.add(value, itemsFilter);\r
129         }\r
130         progressMonitor.worked(1);\r
131         progressMonitor.done();\r
132     }\r
133 \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
137     }\r
138 \r
139     @Override\r
140     public String getElementName(Object item) {\r
141         return item.toString();\r
142     }\r
143 \r
144 }\r