Example #1
0
/**
 * Paints the basic info for the selected target on the given canvas
 * @param canvas The canvas to paint on
 */
void
FlarmTrafficControl::PaintTrafficInfo(Canvas &canvas) const
{
  // Don't paint numbers if no plane selected
  if (selection == -1)
    return;

  assert(data.FLARM_Traffic[selection].defined());

  // Temporary string
  TCHAR tmp[20];
  // Temporary string size
  SIZE sz;
  // Shortcut to the selected traffic
  FLARM_TRAFFIC traffic;
  if (WarningMode())
    traffic = data.FLARM_Traffic[warning];
  else
    traffic = data.FLARM_Traffic[selection];

  assert(traffic.defined());

  RECT rc;
  rc.left = padding;
  rc.top = padding;
  rc.right = canvas.get_width() - padding;
  rc.bottom = canvas.get_height() - padding;

  // Set the text color and background
  switch (traffic.AlarmLevel) {
  case 1:
    canvas.set_text_color(hcWarning);
    break;
  case 2:
  case 3:
    canvas.set_text_color(hcAlarm);
    break;
  case 4:
  case 0:
  default:
    canvas.set_text_color(hcStandard);
    break;
  }
  canvas.background_transparent();

  // Climb Rate
  if (!WarningMode()) {
    Units::FormatUserVSpeed(traffic.Average30s, tmp, 20);
    canvas.select(hfInfoValues);
    sz = canvas.text_size(tmp);
    canvas.text(rc.right - sz.cx, rc.top + hfInfoLabels.get_height(), tmp);

    canvas.select(hfInfoLabels);
    sz = canvas.text_size(_("Vario:"));
    canvas.text(rc.right - sz.cx, rc.top, _("Vario:"));
  }

  // Distance
  Units::FormatUserDistance(hypot(traffic.RelativeEast, traffic.RelativeNorth),
                            tmp, 20);
  canvas.select(hfInfoValues);
  sz = canvas.text_size(tmp);
  canvas.text(rc.left, rc.bottom - sz.cy, tmp);

  canvas.select(hfInfoLabels);
  canvas.text(rc.left,
              rc.bottom - hfInfoValues.get_height() - hfInfoLabels.get_height(),
              _("Distance:"));

  // Relative Height
  Units::FormatUserArrival(traffic.RelativeAltitude, tmp, 20);
  canvas.select(hfInfoValues);
  sz = canvas.text_size(tmp);
  canvas.text(rc.right - sz.cx, rc.bottom - sz.cy, tmp);

  canvas.select(hfInfoLabels);
  sz = canvas.text_size(_("Rel. Alt.:"));
  canvas.text(rc.right - sz.cx,
              rc.bottom - hfInfoValues.get_height() - hfInfoLabels.get_height(),
              _("Rel. Alt.:"));

  // ID / Name
  if (traffic.HasName()) {
    canvas.select(hfCallSign);
    if (!traffic.HasAlarm()) {
      if (settings.TeamFlarmTracking &&
          traffic.ID == settings.TeamFlarmIdTarget)
        canvas.set_text_color(hcTeam);
      else
        canvas.set_text_color(hcSelection);
    }
    _tcscpy(tmp, traffic.Name);
  } else {
    traffic.ID.format(tmp);
  }
  canvas.text(rc.left, rc.top, tmp);
}