X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Fsearch%2FSCLSearchResultPage.java;fp=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Fsearch%2FSCLSearchResultPage.java;h=bed4fb123591a2c98df61d3e6bb14618e7d8a4e0;hp=8a8c5059cd852834a63ffa5437724b00ed0bdcd0;hb=4d31ea9ef9aa6e2d5dc188b64dc76bbefc50bb88;hpb=2b4fa8a728580e74bcfed340c96950c1c0635544 diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchResultPage.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchResultPage.java index 8a8c5059c..bed4fb123 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchResultPage.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchResultPage.java @@ -32,7 +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.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.scheduleOpenDefinition(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 { @@ -289,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); + } } } @@ -319,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 @@ -340,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); + } } }