private boolean onAltLeft(KeyboardEvent event) { if (noContent()) return true; final Object item = selected(); if (item == null) { environment.hint(Hints.EMPTY_LINE); return true; } final String line = appearance.getScreenAppearance(item, NONE_APPEARANCE_FLAGS); NullCheck.notNull(line, "line"); if (line.isEmpty()) { environment.hint(Hints.EMPTY_LINE); return true; } final int leftBound = appearance.getObservableLeftBound(item); final int rightBound = appearance.getObservableRightBound(item); if (hotPointX <= leftBound) { environment.hint(Hints.BEGIN_OF_LINE); return true; } final String subline = line.substring(leftBound, rightBound); final WordIterator it = new WordIterator(subline, hotPointX - leftBound); if (!it.stepBackward()) { environment.hint(Hints.BEGIN_OF_LINE); return true; } hotPointX = it.pos() + leftBound; environment.say(it.announce()); environment.onAreaNewHotPoint(this); return true; }
protected boolean onBeginListeningQuery(BeginListeningQuery query) { NullCheck.notNull(query, "query"); final int index = selectedIndex(); if (index < 0) return false; final int count = model.getItemCount(); if (index >= count) return false; final Object current = model.getItem(index); final String text = appearance .getScreenAppearance(current, NONE_APPEARANCE_FLAGS) .substring(hotPointX, appearance.getObservableRightBound(current)); // Log.debug("listen", appearance.getScreenAppearance(current, NONE_APPEARANCE_FLAGS)); // Log.debug("listen", "" + hotPointX); if (text.isEmpty() && index + 1 >= count) return false; if (index + 1 < count) { final Object next = model.getItem(index + 1); query.answer( new BeginListeningQuery.Answer( text, new ListeningInfo(index + 1, appearance.getObservableLeftBound(next)))); } else query.answer( new BeginListeningQuery.Answer( text, new ListeningInfo(index, appearance.getObservableRightBound(current)))); return true; }
@Override public String getLine(int index) { if (isEmpty()) return index == 0 ? noContentStr() : ""; final int itemIndex = getItemIndexOnLine(index); if (itemIndex < 0 || itemIndex >= model.getItemCount()) return ""; final Object res = model.getItem(itemIndex); return res != null ? appearance.getScreenAppearance(res, NONE_APPEARANCE_FLAGS) : ""; }
protected String getObservableSubstr(Object item) { NullCheck.notNull(item, "item"); final String line = appearance.getScreenAppearance(item, NONE_APPEARANCE_FLAGS); NullCheck.notNull(line, "line"); if (line.isEmpty()) return ""; final int leftBound = Math.min(appearance.getObservableLeftBound(item), line.length()); final int rightBound = Math.min(appearance.getObservableRightBound(item), line.length()); if (leftBound >= rightBound) return ""; return line.substring(leftBound, rightBound); }
protected boolean onAnnounce() { environment.playSound(Sounds.INTRO_REGULAR); String item = ""; if (selected() != null) item = appearance.getScreenAppearance(selected(), EnumSet.noneOf(Appearance.Flags.class)).trim(); if (!item.isEmpty()) item = " " + item; environment.say(getAreaName() + item); return true; }
private boolean onAltHome(KeyboardEvent event) { if (noContent()) return true; final Object item = selected(); NullCheck.notNull(item, "item"); final String line = appearance.getScreenAppearance(item, NONE_APPEARANCE_FLAGS); NullCheck.notNull(line, "line"); hotPointX = appearance.getObservableLeftBound(item); announceChar(line, hotPointX, appearance.getObservableRightBound(item)); environment.onAreaNewHotPoint(this); return true; }
@Override public RegionContent getRegion(int fromX, int fromY, int toX, int toY) { if (model == null || model.getItemCount() < 0) return null; if (fromY >= model.getItemCount() || toY > model.getItemCount()) return null; if (fromY == toY) { final String line = appearance.getScreenAppearance(model.getItem(fromY), NONE_APPEARANCE_FLAGS); if (line == null || line.isEmpty()) return null; final int fromPos = fromX < line.length() ? fromX : line.length(); final int toPos = toX < line.length() ? toX : line.length(); if (fromPos >= toPos) return null; return new RegionContent(new String[] {line.substring(fromPos, toPos)}); } final LinkedList<String> res = new LinkedList<String>(); for (int i = fromY; i < toY; ++i) { final String line = appearance.getScreenAppearance(model.getItem(i), NONE_APPEARANCE_FLAGS); res.add(line != null ? line : ""); } res.add(""); return new RegionContent(res.toArray(new String[res.size()])); }
@Override public RegionContent getWholeRegion() { if (model == null || model.getItemCount() < 0) return null; final LinkedList<String> res = new LinkedList<String>(); final int count = model.getItemCount(); for (int i = 0; i < count; ++i) { final String line = appearance.getScreenAppearance(model.getItem(i), NONE_APPEARANCE_FLAGS); res.add(line != null ? line : ""); } res.add(""); return new RegionContent(res.toArray(new String[res.size()])); }
private boolean onAltEnd(KeyboardEvent event) { if (noContent()) return true; final Object item = selected(); if (item == null) { environment.hint(Hints.EMPTY_LINE); return true; } final String line = appearance.getScreenAppearance(item, NONE_APPEARANCE_FLAGS); NullCheck.notNull(line, "line"); hotPointX = appearance.getObservableRightBound(item); environment.hint(Hints.END_OF_LINE); environment.onAreaNewHotPoint(this); return true; }
protected boolean onArrowRight(KeyboardEvent event) { if (noContent()) return true; final Object item = selected(); NullCheck.notNull(item, "item"); final String line = appearance.getScreenAppearance(item, NONE_APPEARANCE_FLAGS); NullCheck.notNull(line, "line"); if (line.isEmpty()) { environment.hint(Hints.EMPTY_LINE); return true; } final int rightBound = appearance.getObservableRightBound(item); if (hotPointX >= rightBound) { environment.hint(Hints.END_OF_LINE); return true; } ++hotPointX; announceChar(line, hotPointX, rightBound); environment.onAreaNewHotPoint(this); return true; }