public void createControl(Composite parent) { fViewerContainer = new Composite(parent, SWT.NULL); fViewerContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); fViewerContainer.setSize(100, 100); fViewerContainer.setLayout(new FillLayout()); fTreeViewer = new TreeViewer(fViewerContainer, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); fTreeViewer.setContentProvider( new ITreeContentProvider() { public void dispose() {} public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { viewer.refresh(); } public Object[] getChildren(Object parentElement) { return new Object[0]; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return false; } public Object[] getElements(Object inputElement) { if (fQuery == null) return new Object[0]; else { return ((MemorySearchResult) fQuery.getSearchResult()).getMatches(); } } }); fTreeViewer.setInput(new Object()); fTreeViewer.addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(final SelectionChangedEvent event) { if (event.getSelection() instanceof StructuredSelection) { IMemoryRenderingContainer containers[] = ((IMemorySearchQuery) fQuery).getMemoryView().getMemoryRenderingContainers(); MemoryMatch match = (MemoryMatch) ((StructuredSelection) event.getSelection()).getFirstElement(); if (match != null) { for (int i = 0; i < containers.length; i++) { IMemoryRendering rendering = containers[i].getActiveRendering(); if (rendering instanceof IRepositionableMemoryRendering) { try { ((IRepositionableMemoryRendering) rendering) .goToAddress(match.getStartAddress()); } catch (DebugException e) { MemorySearchPlugin.logError( Messages.getString( "MemorySearchResultsPage.RepositioningMemoryViewFailed"), e); //$NON-NLS-1$ } } if (rendering != null) { // Temporary, until platform accepts/adds new interface for setting the // selection try { Method m = rendering .getClass() .getMethod( "setSelection", new Class[] {BigInteger.class, BigInteger.class}); // $NON-NLS-1$ if (m != null) m.invoke(rendering, match.getStartAddress(), match.getEndAddress()); } catch (Exception e) { // do nothing } } } } } } }); fTreeViewer.setLabelProvider( new ILabelProvider() { public String getText(Object element) { if (element instanceof MemoryMatch) return "0x" + ((MemoryMatch) element).getStartAddress().toString(16); // $NON-NLS-1$ return element.toString(); } public Image getImage(Object element) { return null; } public void addListener(ILabelProviderListener listener) {} public void dispose() {} public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) {} }); fQueryListener = createQueryListener(); NewSearchUI.addQueryListener(fQueryListener); }