]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleSelectionDialog.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleSelectionDialog.java
new file mode 100644 (file)
index 0000000..0999560
--- /dev/null
@@ -0,0 +1,134 @@
+package org.simantics.scl.ui.editor2;\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.osgi.SCLOsgi;\r
+import org.simantics.scl.ui.Activator;\r
+\r
+import gnu.trove.procedure.TObjectProcedure;\r
+\r
+public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
+    private static final String DIALOG_SETTINGS = "SCLModuleSelectionDialogSettings";\r
+\r
+    public SCLModuleSelectionDialog(Shell shell) {\r
+        super(shell, false);\r
+        setTitle("Choose an SCL module");\r
+        setSelectionHistory(new ModuleSelectionHistory());\r
+        setListLabelProvider(new LabelProvider() {\r
+            @Override\r
+            public String getText(Object element) {\r
+                if(element == null)\r
+                    return "";\r
+                return (String)element;\r
+            }\r
+        });\r
+    }\r
+\r
+    private class ModuleSelectionHistory 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
+                String a = (String)arg0;\r
+                String b = (String)arg1;\r
+                return a.compareTo(b);\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
+        SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {\r
+            @Override\r
+            public boolean execute(String moduleName) {\r
+                contentProvider.add(moduleName, itemsFilter);\r
+                return true;\r
+            }\r
+        });\r
+        progressMonitor.worked(1);\r
+        progressMonitor.done();\r
+    }\r
+\r
+    @Override\r
+    public String getElementName(Object item) {\r
+        return item.toString();\r
+    }\r
+\r
+}\r