]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchResultPage.java
Externalize strings in org.simantics.scl.ui
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / search / SCLSearchResultPage.java
index 86b3ea4a359632b6fab1b78fe6f4fa604599a9d1..feace875f50dde17fbfe70f6e3b1c4f821c004a2 100644 (file)
@@ -1,15 +1,17 @@
 package org.simantics.scl.ui.search;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
 import org.eclipse.jface.viewers.DecorationContext;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.IColorProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ILabelProviderListener;
@@ -21,7 +23,6 @@ import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.search.ui.text.AbstractTextSearchResult;
 import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
 import org.eclipse.search.ui.text.Match;
@@ -31,8 +32,9 @@ import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.module.debug.SymbolReference;
-import org.simantics.scl.ui.editor2.OpenDeclaration;
+import org.simantics.scl.db.SCLExpressionTableEntry;
 import org.simantics.scl.ui.editor2.OpenSCLDefinition;
+import org.simantics.ui.workbench.action.DefaultActions;
 
 public class SCLSearchResultPage extends AbstractTextSearchViewPage {
 
@@ -55,13 +57,23 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
     private static final ViewerComparator comparator = new ViewerComparator() {
         @Override
         public int compare(Viewer viewer, Object e1, Object e2) {
-            SymbolReference r1 = (SymbolReference)e1;
-            SymbolReference r2 = (SymbolReference)e2;
-            int c = r1.referrer.toString().compareTo(r2.referrer.toString());
-            if (c != 0) {
-                return c;
+            if (e1 instanceof SymbolReference && e2 instanceof SymbolReference) {
+                SymbolReference r1 = (SymbolReference)e1;
+                SymbolReference r2 = (SymbolReference)e2;
+                int c = r1.referrer.toString().compareTo(r2.referrer.toString());
+                if (c != 0) {
+                    return c;
+                } else {
+                    return Integer.compare(Locations.beginOf(r1.referenceLocation), Locations.beginOf(r2.referenceLocation));
+                }
+            } else if (e1 instanceof SymbolReference && e2 instanceof SCLExpressionTableEntry) {
+                return 1;
+            } else if (e2 instanceof SymbolReference && e1 instanceof SCLExpressionTableEntry) {
+                return -1;
             } else {
-                return Integer.compare(Locations.beginOf(r1.referenceLocation), Locations.beginOf(r2.referenceLocation));
+                SCLExpressionTableEntry r1 = (SCLExpressionTableEntry)e1;
+                SCLExpressionTableEntry r2 = (SCLExpressionTableEntry)e2;
+                return r1.getContent().compareTo(r2.getContent());
             }
         }
     };
@@ -88,15 +100,23 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
     protected void handleOpen(OpenEvent event) {
         Object selection = ((StructuredSelection)event.getSelection()).getFirstElement();
         if (selection != null) {
-            SymbolReference reference = (SymbolReference) selection;
-            OpenSCLDefinition.openDefinition(reference.referrer.module, reference.referenceLocation);
+            open(selection);
         }
     }
     
     @Override
     protected void showMatch(Match match, int currentOffset, int currentLength) throws PartInitException {
-        SymbolReference reference = (SymbolReference) match.getElement();
-        OpenSCLDefinition.openDefinition(reference.referrer.module, reference.referenceLocation);
+        open(match.getElement());
+    }
+    
+    private void open(Object selection) {
+        if (selection instanceof SymbolReference) {
+            SymbolReference reference = (SymbolReference) selection;
+            OpenSCLDefinition.scheduleOpenDefinition(reference.referrer.module, reference.referenceLocation);
+        } else if (selection instanceof SCLExpressionTableEntry) {
+            SCLExpressionTableEntry entry = (SCLExpressionTableEntry) selection;
+            DefaultActions.performDefaultAction(getControl().getDisplay().getActiveShell(), new StructuredSelection(entry.getResource()));
+        }
     }
 
     public static class SCLSearchResultContentProvider extends DecoratingStyledCellLabelProvider implements ITreeContentProvider, ILabelProvider {
@@ -145,6 +165,17 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
             Set<Object> toRemove= new HashSet<>();
             Set<Object> toUpdate= new HashSet<>();
             Map<Object, Set<Object>> toAdd= new HashMap<>();
+            
+            // TODO: Clear this for now at this point but probably this has some 
+            // side-effects once nested children can be shown, never?
+            for (Entry<Object, Set<Object>> e : fChildrenMap.entrySet()) {
+                Collection<Object> refs = (Collection<Object>) e.getValue();
+                refs.forEach(r -> {
+                    remove(toRemove, toUpdate, r);
+                });
+            }
+            
+            
             for (int i= 0; i < updatedElements.length; i++) {
                 if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0)
                     insert(toAdd, toUpdate, updatedElements[i]);
@@ -278,8 +309,15 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
 
         @Override
         public String getText(Object element) {
-            SymbolReference ref = (SymbolReference) element;
-            return ref.referrer.toString();
+            if (element instanceof SymbolReference) {
+                SymbolReference ref = (SymbolReference) element;
+                return ref.referrer.toString();
+            } else if (element instanceof SCLExpressionTableEntry) {
+                SCLExpressionTableEntry entry = (SCLExpressionTableEntry) element;
+                return entry.getContent();
+            } else {
+                return "unsupported element " + String.valueOf(element); //$NON-NLS-1$
+            }
         }
 
     }
@@ -308,8 +346,7 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
 
         @Override
         public StyledString getStyledText(Object element) {
-            SymbolReference ref = (SymbolReference) element;
-            return new StyledString(ref.referrer.toString()); //+ " " + ref.referred + " " + ref.referenceLocation);
+            return new StyledString(getText(element)); //+ " " + ref.referred + " " + ref.referenceLocation);
         }
 
         @Override
@@ -329,7 +366,15 @@ public class SCLSearchResultPage extends AbstractTextSearchViewPage {
 
         @Override
         public String getText(Object element) {
-            return null;
+            if (element instanceof SymbolReference) {
+                SymbolReference ref = (SymbolReference) element;
+                return ref.referrer.toString();
+            } else if (element instanceof SCLExpressionTableEntry) {
+                SCLExpressionTableEntry entry = (SCLExpressionTableEntry) element;
+                return entry.getContent();
+            } else {
+                return "unsupported element " + String.valueOf(element); //$NON-NLS-1$
+            }
         }
         
     }