PMWindow.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. """
  2. Created on 22-04-2013
  3. @author: citan
  4. """
  5. import pygame
  6. from pimonitor.cu.PMCUParameter import PMCUParameter
  7. class PMWindow(object):
  8. """
  9. classdocs
  10. """
  11. def __init__(self, parameters):
  12. self._fg_color = pygame.Color(200, 140, 0)
  13. self._bg_color = pygame.Color(0, 0, 0)
  14. self._dict = dict()
  15. self._parameters = parameters
  16. self._packets = None
  17. self._reading_no = 0
  18. self._sum_fuel_consumption = 0.0
  19. def set_surface(self, surface):
  20. if surface is None:
  21. return
  22. self._surface = surface
  23. self._width = self._surface.get_width()
  24. self._height = self._surface.get_height()
  25. self._title_font_size = int(self._surface.get_height() / 16)
  26. self._value_font_size = int(self._surface.get_height() / 3.4)
  27. self._title_font = pygame.font.SysFont(pygame.font.get_default_font(), self._title_font_size)
  28. self._value_font = pygame.font.SysFont(pygame.font.get_default_font(), self._value_font_size)
  29. self._font_aa = 1
  30. self._value_lbl_width = self._value_font.render("999", self._font_aa, self._fg_color).get_width()
  31. def render(self):
  32. if self._packets is None:
  33. return
  34. first_row_height = self._title_font_size + self._value_font_size + 10
  35. second_row_height = first_row_height + self._title_font_size + self._value_font_size + 20
  36. pygame.draw.line(self._surface, self._fg_color, (0, first_row_height + 10),
  37. (self._width, first_row_height + 10))
  38. parameter_number = 0
  39. for parameter in self._parameters:
  40. if parameter.get_cu_type() == PMCUParameter.CU_TYPE_CALCULATED_PARAMETER():
  41. value = parameter.get_calculated_value(self._packets[len(self._parameters)-1:])
  42. self._reading_no += 1
  43. self._sum_fuel_consumption += float(value)
  44. else:
  45. value = parameter.get_value(self._packets[parameter_number])
  46. title = parameter.get_name() # + " (" + param.get_default_unit() + ")"
  47. first_row_ids = ["E114", "P104", "P122"]
  48. if parameter.get_id() in first_row_ids:
  49. index = first_row_ids.index(parameter.get_id())
  50. x_offset = (self._width / len(first_row_ids)) * index + 2
  51. titlelbl = self._title_font.render(title, self._font_aa, self._fg_color)
  52. valuelbl = self._value_font.render(value, self._font_aa, self._fg_color)
  53. self._surface.blit(titlelbl, (x_offset + 4, 10))
  54. self._surface.blit(valuelbl, (x_offset + 4, 10 + self._title_font_size))
  55. pygame.draw.line(self._surface, self._fg_color, (x_offset, 0), (x_offset, first_row_height))
  56. second_row_ids = ["P203"]
  57. if parameter.get_id() in second_row_ids:
  58. index = second_row_ids.index(parameter.get_id())
  59. x_offset = (self._width / len(second_row_ids)) * index + 2
  60. titlelbl = self._title_font.render(title, self._font_aa, self._fg_color)
  61. valuelbl = self._value_font.render(value, self._font_aa, self._fg_color)
  62. self._surface.blit(titlelbl, (x_offset + 4, first_row_height + 20))
  63. self._surface.blit(valuelbl, (x_offset + 4, first_row_height + 20 + self._title_font_size))
  64. pygame.draw.line(self._surface, self._fg_color, (x_offset, first_row_height + 20),
  65. (x_offset, second_row_height))
  66. index = 1
  67. x_offset = (self._width / 2) * index + 2
  68. titlelbl = self._title_font.render("Average Fuel Cons. l/100km", self._font_aa, self._fg_color)
  69. valuelbl = self._value_font.render(str(self._sum_fuel_consumption/self._reading_no), self._font_aa, self._fg_color)
  70. self._surface.blit(titlelbl, (x_offset + 4, first_row_height + 20))
  71. self._surface.blit(valuelbl, (x_offset + 4, first_row_height + 20 + self._title_font_size))
  72. pygame.draw.line(self._surface, self._fg_color, (x_offset, first_row_height + 20),
  73. (x_offset, second_row_height))
  74. parameter_number += 1
  75. def get_parameters(self):
  76. return self._parameters[:-1] + self._parameters[-1].get_dependencies()
  77. def set_packets(self, packets):
  78. self._packets = packets