1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[245752] [memory] Search results should be highlighted

This commit is contained in:
Ted Williams 2008-08-29 21:40:29 +00:00
parent db563baeb9
commit 6958d0987f
5 changed files with 91 additions and 7 deletions

View file

@ -329,6 +329,12 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe
super.deactivated(); super.deactivated();
} }
public void setSelection(BigInteger start, BigInteger end)
{
fRendering.getSelection().setStart(start, start);
fRendering.getSelection().setEnd(end, end);
}
public void gotoAddress(final BigInteger address) public void gotoAddress(final BigInteger address)
{ {
this.fRendering.gotoAddress(address); this.fRendering.gotoAddress(address);

View file

@ -11,6 +11,8 @@
package org.eclipse.dd.debug.ui.memory.search; package org.eclipse.dd.debug.ui.memory.search;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer; import java.util.StringTokenizer;
@ -885,7 +887,7 @@ public class FindReplaceDialog extends SelectionDialog
public IStatus run(IProgressMonitor monitor) public IStatus run(IProgressMonitor monitor)
throws OperationCanceledException { throws OperationCanceledException {
BigInteger searchPhraseLength = BigInteger.valueOf(searchPhrase.getByteLength()); final BigInteger searchPhraseLength = BigInteger.valueOf(searchPhrase.getByteLength());
BigInteger range = searchForward ? end.subtract(start) : start.subtract(end); BigInteger range = searchForward ? end.subtract(start) : start.subtract(end);
BigInteger currentPosition = start; BigInteger currentPosition = start;
@ -918,7 +920,7 @@ public class FindReplaceDialog extends SelectionDialog
if(matched) if(matched)
{ {
if(all && !isReplace) if(all && !isReplace)
((MemorySearchResult) getSearchResult()).addMatch("0x" + currentPosition.toString(16)); //$NON-NLS-1$ ((MemorySearchResult) getSearchResult()).addMatch(new MemoryMatch(currentPosition, searchPhraseLength));
if(isReplace) if(isReplace)
{ {
@ -958,6 +960,17 @@ public class FindReplaceDialog extends SelectionDialog
MemorySearchPlugin.logError(Messages.getString("FindReplaceDialog.RepositioningMemoryViewFailed"), e); //$NON-NLS-1$ MemorySearchPlugin.logError(Messages.getString("FindReplaceDialog.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 } );
if(m != null)
m.invoke(rendering, finalCurrentPosition, finalCurrentPosition.add(searchPhraseLength));
} catch (Exception e) {
// do nothing
}
}
} }
} }

View file

@ -0,0 +1,48 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ted R Williams (Wind River Systems, Inc.) - initial implementation
*******************************************************************************/
package org.eclipse.dd.debug.ui.memory.search;
import java.math.BigInteger;
public class MemoryMatch
{
BigInteger fStartAddress;
public BigInteger getStartAddress() {
return fStartAddress;
}
public void setStartAddress(BigInteger startAddress) {
fStartAddress = startAddress;
}
public BigInteger getLength() {
return fLength;
}
public void setLength(BigInteger length) {
fLength = length;
}
BigInteger fLength;
public MemoryMatch(BigInteger startAddress, BigInteger length)
{
fStartAddress = startAddress;
fLength = length;
}
public BigInteger getEndAddress()
{
return getStartAddress().add(getLength());
}
}

View file

@ -53,15 +53,15 @@ public class MemorySearchResult implements ISearchResult
return fLabel; return fLabel;
} }
public String[] getMatches() public MemoryMatch[] getMatches()
{ {
String matches[] = new String[fMatches.size()]; MemoryMatch matches[] = new MemoryMatch[fMatches.size()];
for(int i = 0; i < matches.length; i++) for(int i = 0; i < matches.length; i++)
matches[i] = (String) fMatches.elementAt(i); matches[i] = (MemoryMatch) fMatches.elementAt(i);
return matches; return matches;
} }
public void addMatch(String address) public void addMatch(MemoryMatch address)
{ {
fMatches.addElement(address); fMatches.addElement(address);
fireChange(); fireChange();

View file

@ -11,6 +11,7 @@
package org.eclipse.dd.debug.ui.memory.search; package org.eclipse.dd.debug.ui.memory.search;
import java.lang.reflect.Method;
import java.math.BigInteger; import java.math.BigInteger;
import org.eclipse.dd.debug.ui.memory.search.FindReplaceDialog.IMemorySearchQuery; import org.eclipse.dd.debug.ui.memory.search.FindReplaceDialog.IMemorySearchQuery;
@ -177,17 +178,30 @@ public class MemorySearchResultsPage extends Page implements ISearchResultPage,
if( event.getSelection() instanceof StructuredSelection) if( event.getSelection() instanceof StructuredSelection)
{ {
IMemoryRenderingContainer containers[] = ((IMemorySearchQuery) fQuery).getMemoryView().getMemoryRenderingContainers(); IMemoryRenderingContainer containers[] = ((IMemorySearchQuery) fQuery).getMemoryView().getMemoryRenderingContainers();
MemoryMatch match = (MemoryMatch) ((StructuredSelection) event.getSelection()).getFirstElement();
for(int i = 0; i < containers.length; i++) for(int i = 0; i < containers.length; i++)
{ {
IMemoryRendering rendering = containers[i].getActiveRendering(); IMemoryRendering rendering = containers[i].getActiveRendering();
if(rendering instanceof IRepositionableMemoryRendering) if(rendering instanceof IRepositionableMemoryRendering)
{ {
try { try {
((IRepositionableMemoryRendering) rendering).goToAddress(new BigInteger(((StructuredSelection) event.getSelection()).getFirstElement().toString().substring(2), 16)); ((IRepositionableMemoryRendering) rendering).goToAddress(match.getStartAddress());
} catch (DebugException e) { } catch (DebugException e) {
MemorySearchPlugin.logError(Messages.getString("MemorySearchResultsPage.RepositioningMemoryViewFailed"), e); //$NON-NLS-1$ 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
}
}
} }
} }
} }
@ -201,6 +215,9 @@ public class MemorySearchResultsPage extends Page implements ISearchResultPage,
} }
public String getText(Object element) { public String getText(Object element) {
if(element instanceof MemoryMatch)
return "0x" + ((MemoryMatch) element).getStartAddress().toString(16); //$NON-NLS-1$
return element.toString(); return element.toString();
} }