diff --git a/docs/badge/application-programming.rst b/docs/badge/application-programming.rst index d8bc843116d9627234184aa096cb167030b462c9..36ebcc2f9a2217b33dff80f4f4626903de9d8071 100644 --- a/docs/badge/application-programming.rst +++ b/docs/badge/application-programming.rst @@ -357,7 +357,7 @@ Let's introduce the final class you should actually be using for application dev .. code-block:: python - from st3m.application import Application + from st3m.application import Application, ApplicationContext import st3m.run class SecondScreen(BaseView): @@ -381,8 +381,8 @@ Let's introduce the final class you should actually be using for application dev class MyDemo(Application): - def __init__(self) -> None: - super().__init__(name="My demo") + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) def draw(self, ctx: Context) -> None: # Paint the background black @@ -399,7 +399,7 @@ Let's introduce the final class you should actually be using for application dev if self.input.right_shoulder.middle.pressed: self._view_manager.push(SecondScreen()) - st3m.run.run_view(Example()) + st3m.run.run_view(Example(ApplicationContext())) The `Application` class gives you the following extras: diff --git a/python_payload/apps/demo_cap_touch/main.py b/python_payload/apps/demo_cap_touch/main.py index 381d831b85610eaa937775f744d4d227f4fa9727..2819745974e53ece984f554ae476e8879ad8a5be 100644 --- a/python_payload/apps/demo_cap_touch/main.py +++ b/python_payload/apps/demo_cap_touch/main.py @@ -1,4 +1,5 @@ -from st3m import application, logging +from st3m import logging +from st3m.application import Application, ApplicationContext from st3m.goose import List from st3m.input import InputState from ctx import Context @@ -32,9 +33,9 @@ class Dot: ).fill() -class CapTouchDemo(application.Application): - def __init__(self, name: str) -> None: - super().__init__(name) +class CapTouchDemo(Application): + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) self.dots: List[Dot] = [] self.last_calib = None # self.ui_autocalib = ui.IconLabel("Autocalib done", size=30) diff --git a/python_payload/apps/demo_harmonic/__init__.py b/python_payload/apps/demo_harmonic/__init__.py index 7eccb43333f0c05712de5e6f94e567106929007d..3367c9f6f9ed5efd3b76d6309b8ad73219236c31 100644 --- a/python_payload/apps/demo_harmonic/__init__.py +++ b/python_payload/apps/demo_harmonic/__init__.py @@ -17,12 +17,12 @@ chords = [ [3, 7, 10, 14, 15], ] -from st3m.application import Application +from st3m.application import Application, ApplicationContext class HarmonicApp(Application): - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) self.color_intensity = 0.0 self.chord_index = 0 diff --git a/python_payload/apps/demo_melodic/__init__.py b/python_payload/apps/demo_melodic/__init__.py index 20b02e89306b31fdb03c14b22806f843c7396c4e..4bf3d9f977948771995a6f7eac892bf2bd05fcbc 100644 --- a/python_payload/apps/demo_melodic/__init__.py +++ b/python_payload/apps/demo_melodic/__init__.py @@ -83,13 +83,13 @@ def foreground() -> None: adjust_playing_field_to_octave() -from st3m.application import Application +from st3m.application import Application, ApplicationContext # TODO(q3k): properly port this app class MelodicApp(Application): - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) init() def draw(self, ctx: Context) -> None: diff --git a/python_payload/apps/demo_scroll/__init__.py b/python_payload/apps/demo_scroll/__init__.py index ccaabab9fddde020a45af57e332b3651028b2a08..05910414ddcd6ac71c7d65d884fc2a64c8ffbf08 100644 --- a/python_payload/apps/demo_scroll/__init__.py +++ b/python_payload/apps/demo_scroll/__init__.py @@ -5,7 +5,7 @@ import math # flow3r imports from st3m import InputState -from st3m.application import Application +from st3m.application import Application, ApplicationContext from st3m.property import BLUE, WHITE from st3m.goose import Optional from st3m.utils import xy_from_polar, tau @@ -16,8 +16,8 @@ from ctx import Context class ScrollDemo(Application): PETAL_NO = 8 - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) self.scroll = CapScrollController() def draw(self, ctx: Context) -> None: diff --git a/python_payload/apps/demo_worms/__init__.py b/python_payload/apps/demo_worms/__init__.py index c2f72ff3e2f89ce39ce88b2c72587fddd3877c59..b2591fb03c63d4e321327418f7594fb0933777f0 100644 --- a/python_payload/apps/demo_worms/__init__.py +++ b/python_payload/apps/demo_worms/__init__.py @@ -5,7 +5,7 @@ import math # flow3r imports from st3m import InputState -from st3m.application import Application +from st3m.application import Application, ApplicationContext from st3m.property import BLUE, WHITE from st3m.goose import Optional from st3m.utils import xy_from_polar @@ -18,8 +18,8 @@ tau = 2 * math.pi # Subclass Application class AppWorms(Application): - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) # HACK: we work against double buffering by keeping note of how many # times on_draw got called. diff --git a/python_payload/apps/nick/__init__.py b/python_payload/apps/nick/__init__.py index 620a0bea69b292fbf05315b84c4245dc9f1c7f3d..167f0da4a87eb774fbb784dc8db3ade50ecee840 100644 --- a/python_payload/apps/nick/__init__.py +++ b/python_payload/apps/nick/__init__.py @@ -1,4 +1,4 @@ -from st3m.application import Application +from st3m.application import Application, ApplicationContext from st3m.property import PUSH_RED, GO_GREEN, BLACK from st3m.goose import Dict, Any from st3m.input import InputState @@ -48,8 +48,8 @@ class Configuration: class NickApp(Application): - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) self._scale = 1.0 self._led = 0.0 self._phase = 0.0 diff --git a/python_payload/apps/otamatone/__init__.py b/python_payload/apps/otamatone/__init__.py index 81986763c72f1a0ad2624ac2d59dcb9c490c8ba4..c666f93e5eed4e64f4201e5abe5cd1f2dd21b99a 100644 --- a/python_payload/apps/otamatone/__init__.py +++ b/python_payload/apps/otamatone/__init__.py @@ -5,7 +5,7 @@ import math import leds from st3m import InputState, Responder -from st3m.application import Application +from st3m.application import Application, ApplicationContext from st3m.property import BLUE, WHITE from st3m.goose import Optional from st3m.utils import xy_from_polar, tau @@ -77,8 +77,8 @@ class Otamatone(Application): PETAL_NO = 3 - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) self._ts = 0 self._blob = Blob() @@ -136,4 +136,4 @@ class Otamatone(Application): if __name__ == "__main__": from st3m.run import run_view - run_view(Otamatone("otamatone")) + run_view(Otamatone(ApplicationContext())) diff --git a/python_payload/apps/simple_drums/__init__.py b/python_payload/apps/simple_drums/__init__.py index 3abfe34ba6121b3a32e4ed0760673171594e35e7..c5f7a1ef1d7c8ef76b7975ac7b97a8650b15f64b 100644 --- a/python_payload/apps/simple_drums/__init__.py +++ b/python_payload/apps/simple_drums/__init__.py @@ -3,7 +3,7 @@ import hardware import captouch import leds -from st3m.application import Application +from st3m.application import Application, ApplicationContext from st3m.input import InputState from st3m.goose import Tuple from ctx import Context @@ -37,8 +37,8 @@ class Dot: class SimpleDrums(Application): - def __init__(self, name: str) -> None: - super().__init__(name) + def __init__(self, app_ctx: ApplicationContext) -> None: + super().__init__(app_ctx) # ctx.rgb(0, 0, 0).rectangle(-120, -120, 240, 240).fill() self.blm = bl00mbox.Channel() self.seq = self.blm.new(bl00mbox.patches.step_sequencer) diff --git a/python_payload/st3m/application.py b/python_payload/st3m/application.py index 576e7cfe54d0b270bd799a25ecd06698bd073294..fc3b515d093a0e0d0c3e532792ea5d22c7c4a458 100644 --- a/python_payload/st3m/application.py +++ b/python_payload/st3m/application.py @@ -18,9 +18,20 @@ import sys log = Log(__name__) +class ApplicationContext: + """ + Container for future application context. + + Envisioned are: path to the bundle, bundle data, + path to a data directory, etc... + """ + + pass + + class Application(BaseView): - def __init__(self, name: str = __name__) -> None: - self._name = name + def __init__(self, app_ctx: ApplicationContext) -> None: + self._app_ctx = app_ctx super().__init__() def on_exit(self) -> None: @@ -152,7 +163,7 @@ class BundleMetadata: log.info(f"Loaded {self.name} module: {m}") klass = getattr(m, class_entry) log.info(f"Loaded {self.name} class: {klass}") - inst = klass(package_name) + inst = klass(ApplicationContext()) log.info(f"Instantiated {self.name} class: {inst}") return inst # type: ignore except Exception as e: