ActivityManager.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #
  2. # Copyright (c) Daniel Sheffield 2021 - 2023
  3. #
  4. # All rights reserved
  5. #
  6. # THIS SOFTWARE IS PROVIDED AS IS WITHOUT WARRANTY
  7. from typing import Iterator
  8. from urwid.display_common import BaseScreen
  9. from urwid import ExitMainLoop
  10. def show_or_exit(key,
  11. screen: BaseScreen = None, palettes: Iterator = None
  12. ):
  13. if isinstance(key, tuple):
  14. return
  15. if key == 'ctrl home':
  16. if screen is None or palettes is None:
  17. return
  18. p = next(palettes)
  19. screen.register_palette(p)
  20. screen.clear()
  21. if key in ('esc',):
  22. raise ExitMainLoop()
  23. class ActivityManager():
  24. def __init__(self):
  25. self.widgets = dict()
  26. self.app = None
  27. def add(self, widget, name):
  28. self.widgets[name] = widget
  29. return widget
  30. def get(self, name):
  31. if name in self.widgets:
  32. return self.widgets[name]
  33. return None
  34. def create(self, cls, name, *args, **kwargs):
  35. widget = cls(*args, **kwargs)
  36. if name is not None:
  37. self.add(widget, name)
  38. return widget
  39. def show(self, widget):
  40. if self.app is not None:
  41. self.app.original_widget = widget
  42. return
  43. self.app = widget
  44. def current(self):
  45. if self.app is None:
  46. return None
  47. return self.app.original_widget