PMSingleWindow.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. """
  2. Created on 22-04-2013
  3. @author: citan
  4. """
  5. import pygame
  6. from pimonitor.cu.PMCUParameter import PMCUParameter
  7. class PMSingleWindow(object):
  8. """
  9. classdocs
  10. """
  11. def __init__(self, param):
  12. self._fg_color = pygame.Color(230, 166, 0)
  13. self._fg_color_dim = pygame.Color(200, 140, 0)
  14. self._bg_color = pygame.Color(0, 0, 0)
  15. self._param = param
  16. self._packets = None
  17. self._x_offset = 0
  18. self._sum_value = 0.0
  19. self._readings = 0
  20. def set_surface(self, surface):
  21. if surface is None:
  22. return
  23. self._surface = surface
  24. self._width = self._surface.get_width()
  25. self._height = self._surface.get_height()
  26. self._title_font_size = int(self._surface.get_height() / 12)
  27. self._value_font_size = int(self._surface.get_height() / 1.8)
  28. self._unit_font_size = int(self._surface.get_height() / 4)
  29. self._title_font = pygame.font.SysFont(pygame.font.get_default_font(), self._title_font_size)
  30. self._value_font = pygame.font.SysFont(pygame.font.get_default_font(), self._value_font_size)
  31. self._unit_font = pygame.font.SysFont(pygame.font.get_default_font(), self._unit_font_size)
  32. self._font_aa = 1
  33. self._title_lbl = self._title_font.render(self._param.get_name(), self._font_aa, self._fg_color)
  34. self._unit_lbl = self._unit_font.render(self._param.get_default_unit(), self._font_aa, self._fg_color_dim)
  35. self._end_x_offset = self._width - self._unit_lbl.get_width() - 10
  36. def render(self):
  37. value = "??"
  38. if self._packets is not None:
  39. if self._param.get_cu_type() == PMCUParameter.CU_TYPE_CALCULATED_PARAMETER():
  40. value = self._param.get_calculated_value(self._packets)
  41. else:
  42. value = self._param.get_value(self._packets[0])
  43. try:
  44. self._sum_value += float(value)
  45. self._readings += 1
  46. except:
  47. pass
  48. value_lbl_width = self._value_font.render(value, self._font_aa, self._fg_color).get_width()
  49. self._x_offset = (self._width - value_lbl_width) / 2
  50. value_lbl = self._value_font.render(value, self._font_aa, self._fg_color)
  51. avg_value_lbl = None
  52. if self._readings != 0:
  53. avg_value_lbl = self._unit_font.render("%.2f" % (self._sum_value / self._readings), self._font_aa, self._fg_color_dim)
  54. self._surface.blit(avg_value_lbl, (self._x_offset + value_lbl_width/2, 10 + self._title_lbl.get_height() + value_lbl.get_height()))
  55. self._surface.blit(self._title_lbl, (2, 2))
  56. self._surface.blit(value_lbl, (self._x_offset, 10 + self._title_font_size))
  57. if avg_value_lbl == None:
  58. self._surface.blit(self._unit_lbl, (self._end_x_offset, 10 + self._title_lbl.get_height() + value_lbl.get_height()))
  59. else:
  60. self._surface.blit(self._unit_lbl, (self._end_x_offset, 10 + self._title_lbl.get_height() + value_lbl.get_height() + avg_value_lbl.get_height()))
  61. def set_packets(self, packets):
  62. self._packets = packets
  63. def get_parameter(self):
  64. return self._param