final FileTypeRegistry fileTypeRegistry,
final EventBus eventBus)
{
display_ = display;
SearchDisplay searchDisplay = display_.getSearchDisplay();
searchDisplay.setAutoSelectEnabled(true);
searchDisplay.addSelectionHandler(new SelectionHandler<Suggestion>() {
@Override
public void onSelection(SelectionEvent<Suggestion> event)
{
// map back to a code search result
CodeNavigationTarget target =
display_.getSearchOracle().navigationTargetFromSuggestion(
event.getSelectedItem());
// create full file path and position
String srcFile = target.getFile();
final FileSystemItem srcItem = FileSystemItem.createFile(srcFile);
final FilePosition pos = target.getPosition();
// fire editing event (delayed so the Enter keystroke
// doesn't get routed into the source editor)
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute()
{
display_.getSearchDisplay().clear();
display_.getSearchOracle().clear();
if (observer_ != null)
observer_.onCompleted();
fileTypeRegistry.editFile(srcItem, pos);
}
});
}
});
searchDisplay.addCloseHandler(new CloseHandler<SearchDisplay>() {
@Override
public void onClose(CloseEvent<SearchDisplay> event)
{
display_.getSearchDisplay().clear();
if (observer_ != null)
observer_.onCancel();
}
});
// various conditions invalidate the search oracle's cache
searchDisplay.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event)
{
display_.getSearchOracle().clear();
}
});
searchDisplay.addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event)
{
display_.getSearchOracle().clear();
}
});
eventBusHandlers_.add(
eventBus.addHandler(FileChangeEvent.TYPE, new FileChangeHandler() {
@Override
public void onFileChange(FileChangeEvent event)
{
// if this was an R file then invalide the cache
CodeSearchOracle oracle = display_.getSearchOracle();
if (oracle.hasCachedResults())
{
FileSystemItem fsi = event.getFileChange().getFile();
if (fsi.getExtension().toLowerCase().equals(".r"))
oracle.clear();
}
}
}));
searchDisplay.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
boolean hasSearch = event.getValue().length() != 0;
if (!hasSearch)
{
display_.getSearchOracle().invalidateSearches();
display_.getSuggestionDisplay().hideSuggestions();
}
}
});
searchDisplay.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event)
{
// eat key-up if the suggestions are showing (since the