// Info retrieval
  private void GetInfo() {
    // Search mode
    if (m_info == null && m_word_search != null) m_info = m_word_search.Word();

    // View mode
    if (m_info == null && m_id >= 0 && m_section != null) {
      WordTrain entry = m_section.WordEntry(m_id);
      m_info = entry.Info();
      m_color_exists = true;
      m_color_level = entry.Score();
    }
  }
  // Touch
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    int eventCase = event.getAction() & MotionEvent.ACTION_MASK;
    if (eventCase == MotionEvent.ACTION_DOWN) {
      // keep track of where on the button we originally pressed in order
      // to tell if we've swiped
      touchX = event.getX();
    } else {
      if (eventCase == MotionEvent.ACTION_CANCEL) {
        return true;
      }

      float distanceFromTouchX = Math.abs(touchX - event.getX());

      // if we release our click without swiping much
      if (eventCase == MotionEvent.ACTION_UP) {
        if (distanceFromTouchX < DRAG_THRESHOLD_X) {
          onClick(view);
          view.performClick();
          return true;
        } else {
          return true;
        }
      }
      // if we swipe our a certain amount either left or right
      else if (eventCase == MotionEvent.ACTION_MOVE) {
        if (distanceFromTouchX > DRAG_THRESHOLD_X) {
          WordTrain entry = m_section.WordEntry(m_id);

          // if swipe right
          if (touchX < event.getX()) {
            entry.SetScore(DataTrainWord.TRAIN_LEVELS - 1);
          } else { // swipe left
            entry.SetScore(0);
          }

          // update the color on the view
          m_color_level = entry.Score();
          TextView view_score = (TextView) view.findViewById(R.id.score);
          updateViewColor(view_score);

          view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
          return true;
        }
      }
    }
    return true;
  }