/examples/kitchensink/Logger.py

http://pyjamas.googlecode.com/ · Python · 62 lines · 45 code · 15 blank · 2 comment · 6 complexity · 260acced87ebc44e0baf6c24a07024a4 MD5 · raw file

  1. from ui import Grid
  2. class Logger(Grid):
  3. instances = []
  4. def __init__(self):
  5. Logger.instances.append(self)
  6. Grid.__init__(self)
  7. self.targets=[]
  8. self.targets.append("app")
  9. #self.targets.append("ui")
  10. self.resize(len(self.targets)+1, 2)
  11. self.setBorderWidth(1)
  12. self.counter=0
  13. self.setHTML(0, 0, "<b>Log</b>")
  14. self.setText(1, 0, "app")
  15. for i in range(len(self.targets)):
  16. target=self.targets[i]
  17. self.setText(i+1, 0, target)
  18. @classmethod
  19. def getSingleton(self):
  20. return Logger.singleton
  21. def setSingleton(self):
  22. Logger.singleton = self
  23. def addTarget(self, target):
  24. self.targets.append(target)
  25. self.resize(len(self.targets)+1, 2)
  26. self.setText(len(self.targets), 0, target)
  27. return self.targets.index(target)
  28. @classmethod
  29. def write(cls, target, message):
  30. for logger in cls.instances:
  31. logger.onMessage(target, message)
  32. def onMessage(self, target, message):
  33. self.counter+=1
  34. if target=='':
  35. target='app'
  36. target_idx=self.targets.index(target)
  37. # add new target
  38. if target_idx<0:
  39. target_idx=self.addTarget(target)
  40. target_row=target_idx+1
  41. old_text=self.getHTML(target_row, 1)
  42. log_line=self.counter + ": " + message
  43. if old_text=='&nbsp;':
  44. new_text=log_line
  45. else:
  46. new_text=old_text + "<br>" + log_line
  47. self.setHTML(target_row, 1, new_text)