/** * use {@link GraphicalViewerKeyHandler} first if auto-layout is active handles the searching on * the graph (depth-first, same way as in Outline) */ @Override public boolean keyPressed(KeyEvent e) { if (Character.isISOControl(e.character)) { if (featureModel.getLayout().hasFeaturesAutoLayout()) { return gvKeyHandler.keyPressed(e); } else { return super.keyPressed(e); } } final long currentTime = System.currentTimeMillis(); if (currentTime - lastTime > timeoutThreshold) { curSearchString = ""; } lastTime = currentTime; curIndex = updateIterator(); if (curSearchString.length() == 1 && curSearchString.charAt(0) == Character.toLowerCase(e.character)) { curSearchString = ""; curIndex = (curIndex + 1) % featureList.size(); } curSearchString += Character.toLowerCase(e.character); final int foundIndex = search(); if (foundIndex >= 0) { // select the new feature final Feature curFeature = featureModel.getFeature(featureList.get(foundIndex)); if (curFeature != null) { FeatureEditPart part = (FeatureEditPart) viewer.getEditPartRegistry().get(curFeature); viewer.setSelection(new StructuredSelection(part)); viewer.reveal(part); curIndex = foundIndex; } } return true; }
private int updateIterator() { final IStructuredSelection sel = (IStructuredSelection) viewer.getSelection(); if (sel.size() == 1 && !(sel.getFirstElement() instanceof ModelEditPart)) { final Object element = sel.getFirstElement(); final String featureName; if (element instanceof FeatureEditPart) { featureName = ((FeatureEditPart) element).getFeature().getName(); } else if (element instanceof Feature) { featureName = ((Feature) element).getName(); } else { return 0; } return (!featureName.equalsIgnoreCase(featureList.get(curIndex))) ? featureList.indexOf(featureName) : curIndex; } return 0; }