예제 #1
0
 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;
 }
예제 #2
0
 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;
 }
예제 #3
0
 @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) : "";
 }
예제 #4
0
 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);
 }
예제 #5
0
 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;
 }
예제 #6
0
 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;
 }
예제 #7
0
 @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()]));
 }
예제 #8
0
 @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()]));
 }
예제 #9
0
 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;
 }
예제 #10
0
 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;
 }