protected boolean onChar(KeyboardEvent event) { if (noContent()) return true; final int count = model.getItemCount(); final char c = event.getChar(); final String beginning; if (selected() != null) { if (hotPointX >= appearance.getObservableRightBound(selected())) return false; final String name = getObservableSubstr(selected()); final int pos = Math.min(hotPointX - appearance.getObservableLeftBound(selected()), name.length()); if (pos < 0) return false; beginning = name.substring(0, pos); } else beginning = ""; Log.debug("list", "beginning:" + beginning); final String mustBegin = beginning + c; for (int i = 0; i < count; ++i) { Log.debug("list", "checking:" + i); final String name = getObservableSubstr(model.getItem(i)); Log.debug("list", "name:" + name); if (!name.startsWith(mustBegin)) continue; hotPointY = getLineIndexByItemIndex(i); Log.debug("list", "hotPointY:" + hotPointY); ++hotPointX; appearance.announceItem(model.getItem(hotPointY), NONE_APPEARANCE_FLAGS); environment.onAreaNewHotPoint(this); return true; } return false; }
protected boolean onAnnounceLine() { if (isEmpty()) return false; final Object item = selected(); if (item == null) { environment.hint(Hints.EMPTY_LINE); return true; } appearance.announceItem(item, NONE_APPEARANCE_FLAGS); return true; }
/** * Searches for the item in the model and sets hot point on it. Given an arbitrary object, this * method looks through all items in the model and does a couple of checks: literal pointers * equality and a check with {@code equals()} method. If at least one of these checks succeeds, * the item is considered equal to the given one, and hot points is set on it. * * @param obj The object to search for * @param introduce Must be true if it is necessary to introduce the object, once it's found * @return True if the request object is found, false otherwise */ public boolean select(Object obj, boolean introduce) { NullCheck.notNull(obj, "obj"); for (int i = 0; i < model.getItemCount(); ++i) { final Object o = model.getItem(i); if (o == null || (obj != o && !obj.equals(o))) continue; hotPointY = i; hotPointX = appearance.getObservableLeftBound(o); environment.onAreaNewHotPoint(this); if (introduce) appearance.announceItem(o, NONE_APPEARANCE_FLAGS); return true; } return false; }
/** * Selects the item by its index. Given the non-negative integer value as an index, this method * sets the hot point on the item addressed with this index, checking only that index is in * appropriate bounds. Index must address the object as a number in the model, ignoring any empty * lines. * * @param index The item index to select * @param announce Must be true, if it is necessary to announce the item , once it has been * selected * @return True if the index is valid and the item gets hot point on it */ public boolean select(int index, boolean announce) { if (index < 0 || index >= model.getItemCount()) return false; final int emptyCountAbove = flags.contains(Flags.EMPTY_LINE_TOP) ? 1 : 0; hotPointY = index + emptyCountAbove; final Object item = model.getItem(index); if (item != null) { hotPointX = appearance.getObservableLeftBound(item); if (announce) appearance.announceItem(item, NONE_APPEARANCE_FLAGS); } else { hotPointX = 0; if (announce) environment.hint(Hints.EMPTY_LINE); } environment.onAreaNewHotPoint(this); return true; }
public void resetHotPoint(boolean introduce) { hotPointY = 0; final int count = model.getItemCount(); if (count < 1) { hotPointX = 0; environment.onAreaNewHotPoint(this); return; } final Object item = model.getItem(0); if (item != null) { hotPointX = item != null ? appearance.getObservableLeftBound(item) : 0; if (introduce) appearance.announceItem(item, NONE_APPEARANCE_FLAGS); } else { hotPointX = 0; environment.hint(Hints.EMPTY_LINE); } environment.onAreaNewHotPoint(this); }
protected void onNewHotPointY(boolean briefAnnouncement) { final int index = selectedIndex(); if (index < 0) { environment.hint(Hints.EMPTY_LINE); hotPointX = 0; environment.onAreaNewHotPoint(this); return; } final Object item = model.getItem(index); if (item == null) { environment.hint(Hints.EMPTY_LINE); hotPointX = 0; environment.onAreaNewHotPoint(this); return; } appearance.announceItem( item, briefAnnouncement ? BRIEF_ANNOUNCEMENT_ONLY : NONE_APPEARANCE_FLAGS); hotPointX = appearance.getObservableLeftBound(item); environment.onAreaNewHotPoint(this); }
public void announceSelected() { final Object item = selected(); if (item != null) appearance.announceItem(item, NONE_APPEARANCE_FLAGS); }