]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/browser/SCLDefinitionSelectionDialog.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/browser/SCLDefinitionSelectionDialog.java
new file mode 100644 (file)
index 0000000..432bab6
--- /dev/null
@@ -0,0 +1,144 @@
+package org.simantics.scl.ui.browser;\r
+\r
+import java.util.Comparator;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IDialogSettings;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.IMemento;\r
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
+import org.eclipse.ui.dialogs.SearchPattern;\r
+import org.simantics.scl.compiler.common.names.Name;\r
+import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
+import org.simantics.scl.compiler.module.repository.ModuleRepositories;\r
+import org.simantics.scl.compiler.types.Types;\r
+import org.simantics.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.ui.Activator;\r
+\r
+public class SCLDefinitionSelectionDialog extends FilteredItemsSelectionDialog {\r
+    private static final String DIALOG_SETTINGS = "SCLDefinitionSelectionDialogSettings";\r
+\r
+    public SCLDefinitionSelectionDialog(Shell shell) {\r
+        super(shell, false);\r
+        setTitle("Choose an SCL definition");\r
+        setSelectionHistory(new DefinitionSelectionHistory());\r
+        setListLabelProvider(new LabelProvider() {\r
+            @Override\r
+            public String getText(Object element) {\r
+                if(element instanceof String)\r
+                    return (String)element;\r
+                SCLValue value = (SCLValue)element;\r
+                if(element == null)\r
+                    return "";\r
+                Name name = value.getName();\r
+                return name.name + " (" + name.module + ") :: " + value.getType();\r
+            }\r
+        });\r
+    }\r
+\r
+    private class DefinitionSelectionHistory extends SelectionHistory {\r
+        protected Object restoreItemFromMemento(IMemento element) {\r
+            //return element.getString("resource"); //$NON-NLS-1$\r
+            return null;\r
+        }\r
+        protected void storeItemToMemento(Object item, IMemento element) {\r
+            //element.putString("resource", item.toString()); //$NON-NLS-1$\r
+        }\r
+    }\r
+\r
+    @Override\r
+    protected Control createExtendedContentArea(Composite parent) {\r
+        return null;\r
+    }\r
+\r
+    protected IDialogSettings getDialogSettings() {\r
+         IDialogSettings settings = Activator.getInstance().getDialogSettings().getSection(DIALOG_SETTINGS);\r
+         if (settings == null)\r
+             settings = Activator.getInstance().getDialogSettings().addNewSection(DIALOG_SETTINGS);\r
+         return settings;\r
+    }\r
+\r
+    @Override\r
+    protected IStatus validateItem(Object item) {\r
+        return Status.OK_STATUS;\r
+    }\r
+\r
+    @Override\r
+    protected ItemsFilter createFilter() {\r
+        return new ItemsFilter() {\r
+            {\r
+                String patternText = getPattern();\r
+                patternMatcher = new SearchPattern();\r
+                if(patternText != null && patternText.length() > 0)\r
+                    patternMatcher.setPattern(patternText);\r
+                else \r
+                    patternMatcher.setPattern("*");\r
+            }\r
+            \r
+            @Override\r
+            public boolean matchItem(Object item) {\r
+                String text = item.toString();\r
+                if(getPattern().contains("/"))\r
+                    return matches(text);\r
+                else {\r
+                    int p = text.lastIndexOf('/');\r
+                    if(p >= 0)\r
+                        text = text.substring(p+1);\r
+                    return matches(text);\r
+                }\r
+            }\r
+\r
+            @Override\r
+            public boolean isConsistentItem(Object item) {\r
+                return true;\r
+            }\r
+            \r
+        };\r
+    }\r
+\r
+    @SuppressWarnings("rawtypes")\r
+    @Override\r
+    protected Comparator getItemsComparator() {\r
+        return new Comparator() {\r
+            public int compare(Object arg0, Object arg1) {\r
+                SCLValue a = (SCLValue)arg0;\r
+                SCLValue b = (SCLValue)arg1;\r
+                int cmp = a.getName().name.compareTo(b.getName().name);\r
+                if(cmp != 0)\r
+                    return cmp;\r
+                return a.getName().module.compareTo(b.getName().module);\r
+            }\r
+        };\r
+    }\r
+\r
+    @Override\r
+    protected void fillContentProvider(AbstractContentProvider contentProvider,\r
+            ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
+                    throws CoreException {\r
+        progressMonitor.beginTask("Searching", 1); //$NON-NLS-1$\r
+        for(SCLValue value : ModuleRepositories.allValues(SCLOsgi.MODULE_REPOSITORY)) {\r
+            if(isTupleValue(value.getName()))\r
+                continue;\r
+            contentProvider.add(value, itemsFilter);\r
+        }\r
+        progressMonitor.worked(1);\r
+        progressMonitor.done();\r
+    }\r
+\r
+    private boolean isTupleValue(Name name) {\r
+        return name.module.equals(Types.BUILTIN) && name.name.startsWith("(") &&\r
+                (name.name.equals("()") || name.name.charAt(1) == ',');\r
+    }\r
+\r
+    @Override\r
+    public String getElementName(Object item) {\r
+        return item.toString();\r
+    }\r
+\r
+}\r