]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleSelectionDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLModuleSelectionDialog.java
1 package org.simantics.scl.ui.editor2;\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.osgi.SCLOsgi;\r
20 import org.simantics.scl.ui.Activator;\r
21 \r
22 import gnu.trove.procedure.TObjectProcedure;\r
23 \r
24 public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
25     private static final String DIALOG_SETTINGS = "SCLModuleSelectionDialogSettings";\r
26 \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
32             @Override\r
33             public String getText(Object element) {\r
34                 if(element == null)\r
35                     return "";\r
36                 return (String)element;\r
37             }\r
38         });\r
39     }\r
40 \r
41     private class ModuleSelectionHistory extends SelectionHistory {\r
42         protected Object restoreItemFromMemento(IMemento element) {\r
43             //return element.getString("resource"); //$NON-NLS-1$\r
44             return null;\r
45         }\r
46         protected void storeItemToMemento(Object item, IMemento element) {\r
47             //element.putString("resource", item.toString()); //$NON-NLS-1$\r
48         }\r
49     }\r
50 \r
51     @Override\r
52     protected Control createExtendedContentArea(Composite parent) {\r
53         return null;\r
54     }\r
55 \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
60          return settings;\r
61     }\r
62 \r
63     @Override\r
64     protected IStatus validateItem(Object item) {\r
65         return Status.OK_STATUS;\r
66     }\r
67 \r
68     @Override\r
69     protected ItemsFilter createFilter() {\r
70         return new ItemsFilter() {\r
71             {\r
72                 String patternText = getPattern();\r
73                 patternMatcher = new SearchPattern();\r
74                 if(patternText != null && patternText.length() > 0)\r
75                     patternMatcher.setPattern(patternText);\r
76                 else \r
77                     patternMatcher.setPattern("*");\r
78             }\r
79             \r
80             @Override\r
81             public boolean matchItem(Object item) {\r
82                 String text = item.toString();\r
83                 if(getPattern().contains("/"))\r
84                     return matches(text);\r
85                 else {\r
86                     int p = text.lastIndexOf('/');\r
87                     if(p >= 0)\r
88                         text = text.substring(p+1);\r
89                     return matches(text);\r
90                 }\r
91             }\r
92 \r
93             @Override\r
94             public boolean isConsistentItem(Object item) {\r
95                 return true;\r
96             }\r
97             \r
98         };\r
99     }\r
100 \r
101     @SuppressWarnings("rawtypes")\r
102     @Override\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
109             }\r
110         };\r
111     }\r
112 \r
113     @Override\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
119             @Override\r
120             public boolean execute(String moduleName) {\r
121                 contentProvider.add(moduleName, itemsFilter);\r
122                 return true;\r
123             }\r
124         });\r
125         progressMonitor.worked(1);\r
126         progressMonitor.done();\r
127     }\r
128 \r
129     @Override\r
130     public String getElementName(Object item) {\r
131         return item.toString();\r
132     }\r
133 \r
134 }\r