Skip to content
Snippets Groups Projects
Commit 0076f23c authored by q3k's avatar q3k Committed by schneider
Browse files

py/gr33nhouse: switch to ScrollController

parent ca335a11
No related branches found
No related tags found
1 merge request!168Construct gr33nhouse
Pipeline #6955 passed
from st3m.goose import Enum from st3m.goose import Enum
from st3m.application import Application, ApplicationContext from st3m.application import Application, ApplicationContext
from st3m.input import InputController, InputState from st3m.input import InputController, InputState
from st3m.ui.interactions import ScrollController
from st3m.ui import colours from st3m.ui import colours
from st3m.ui.view import ViewManager from st3m.ui.view import ViewManager
from ctx import Context from ctx import Context
...@@ -18,7 +19,6 @@ class ViewState(Enum): ...@@ -18,7 +19,6 @@ class ViewState(Enum):
class Gr33nhouseApp(Application): class Gr33nhouseApp(Application):
items = ["Browse apps", "Record flow3r seed", "Enter flow3r seed"] items = ["Browse apps", "Record flow3r seed", "Enter flow3r seed"]
selection = 0
input: InputController input: InputController
background: Flow3rView background: Flow3rView
...@@ -29,6 +29,8 @@ class Gr33nhouseApp(Application): ...@@ -29,6 +29,8 @@ class Gr33nhouseApp(Application):
self.input = InputController() self.input = InputController()
self.background = Flow3rView() self.background = Flow3rView()
self._sc = ScrollController()
self._sc.set_item_count(3)
self.state = ViewState.CONTENT self.state = ViewState.CONTENT
...@@ -76,7 +78,7 @@ class Gr33nhouseApp(Application): ...@@ -76,7 +78,7 @@ class Gr33nhouseApp(Application):
30.0, 30.0,
).fill() ).fill()
ctx.translate(0, -30 * self.selection) ctx.translate(0, -30 * self._sc.current_position())
offset = 0 offset = 0
...@@ -86,7 +88,7 @@ class Gr33nhouseApp(Application): ...@@ -86,7 +88,7 @@ class Gr33nhouseApp(Application):
ctx.text_baseline = ctx.MIDDLE ctx.text_baseline = ctx.MIDDLE
for idx, item in enumerate(self.items): for idx, item in enumerate(self.items):
if idx == self.selection: if idx == self._sc.target_position():
ctx.gray(0.0) ctx.gray(0.0)
else: else:
ctx.gray(1.0) ctx.gray(1.0)
...@@ -99,6 +101,7 @@ class Gr33nhouseApp(Application): ...@@ -99,6 +101,7 @@ class Gr33nhouseApp(Application):
def think(self, ins: InputState, delta_ms: int) -> None: def think(self, ins: InputState, delta_ms: int) -> None:
self.input.think(ins, delta_ms) self.input.think(ins, delta_ms)
self._sc.think(ins, delta_ms)
if self.vm is None: if self.vm is None:
raise RuntimeError("vm is None") raise RuntimeError("vm is None")
...@@ -112,17 +115,14 @@ class Gr33nhouseApp(Application): ...@@ -112,17 +115,14 @@ class Gr33nhouseApp(Application):
self.background.think(ins, delta_ms) self.background.think(ins, delta_ms)
if self.input.buttons.app.left.pressed: if self.input.buttons.app.left.pressed:
if self.selection > 0: self._sc.scroll_left()
self.selection -= 1
elif self.input.buttons.app.right.pressed: elif self.input.buttons.app.right.pressed:
if self.selection < len(self.items) - 1: self._sc.scroll_right()
self.selection += 1
elif self.input.buttons.app.middle.pressed: elif self.input.buttons.app.middle.pressed:
if self.selection == 0: pos = self._sc.target_position()
if pos == 0:
self.vm.push(AppList()) self.vm.push(AppList())
elif self.selection == 1: elif pos == 1:
self.vm.push(RecordView()) self.vm.push(RecordView())
elif self.selection == 2: elif pos == 2:
self.vm.push(ManualInputView()) self.vm.push(ManualInputView())
...@@ -2,6 +2,7 @@ from st3m.goose import Optional, Enum, Any ...@@ -2,6 +2,7 @@ from st3m.goose import Optional, Enum, Any
from st3m.input import InputController, InputState from st3m.input import InputController, InputState
from st3m.ui import colours from st3m.ui import colours
from st3m.ui.view import BaseView, ViewManager from st3m.ui.view import BaseView, ViewManager
from st3m.ui.interactions import ScrollController
from ctx import Context from ctx import Context
import urequests import urequests
import time import time
...@@ -21,7 +22,6 @@ class AppList(BaseView): ...@@ -21,7 +22,6 @@ class AppList(BaseView):
_state: ViewState = ViewState.INITIAL _state: ViewState = ViewState.INITIAL
apps: list[Any] = [] apps: list[Any] = []
selection: int = 0
input: InputController input: InputController
background: Flow3rView background: Flow3rView
...@@ -30,6 +30,7 @@ class AppList(BaseView): ...@@ -30,6 +30,7 @@ class AppList(BaseView):
self.input = InputController() self.input = InputController()
self.vm = None self.vm = None
self.background = Flow3rView() self.background = Flow3rView()
self._sc = ScrollController()
def on_enter(self, vm: Optional[ViewManager]) -> None: def on_enter(self, vm: Optional[ViewManager]) -> None:
self.vm = vm self.vm = vm
...@@ -89,7 +90,7 @@ class AppList(BaseView): ...@@ -89,7 +90,7 @@ class AppList(BaseView):
30.0, 30.0,
).fill() ).fill()
ctx.translate(0, -30 * self.selection) ctx.translate(0, -30 * self._sc.current_position())
offset = 0 offset = 0
...@@ -100,7 +101,7 @@ class AppList(BaseView): ...@@ -100,7 +101,7 @@ class AppList(BaseView):
ctx.move_to(0, 0) ctx.move_to(0, 0)
for idx, app in enumerate(self.apps): for idx, app in enumerate(self.apps):
if idx == self.selection: if idx == self._sc.target_position():
ctx.gray(0.0) ctx.gray(0.0)
else: else:
ctx.gray(1.0) ctx.gray(1.0)
...@@ -114,6 +115,7 @@ class AppList(BaseView): ...@@ -114,6 +115,7 @@ class AppList(BaseView):
raise RuntimeError(f"Invalid view state {self._state}") raise RuntimeError(f"Invalid view state {self._state}")
def think(self, ins: InputState, delta_ms: int) -> None: def think(self, ins: InputState, delta_ms: int) -> None:
self._sc.think(ins, delta_ms)
if self.initial_ticks == 0 or time.ticks_ms() < self.initial_ticks + 300: if self.initial_ticks == 0 or time.ticks_ms() < self.initial_ticks + 300:
return return
...@@ -132,6 +134,7 @@ class AppList(BaseView): ...@@ -132,6 +134,7 @@ class AppList(BaseView):
return return
self._state = ViewState.LOADED self._state = ViewState.LOADED
self._sc.set_item_count(len(self.apps))
print("App list loaded") print("App list loaded")
except Exception as e: except Exception as e:
print(f"Load failed: {e}") print(f"Load failed: {e}")
...@@ -145,18 +148,14 @@ class AppList(BaseView): ...@@ -145,18 +148,14 @@ class AppList(BaseView):
self.background.think(ins, delta_ms) self.background.think(ins, delta_ms)
if self.input.buttons.app.left.pressed: if self.input.buttons.app.left.pressed:
if self.selection > 0: self._sc.scroll_left()
self.selection -= 1
elif self.input.buttons.app.right.pressed: elif self.input.buttons.app.right.pressed:
if self.selection < len(self.apps) - 1: self._sc.scroll_right()
self.selection += 1
elif self.input.buttons.app.middle.pressed: elif self.input.buttons.app.middle.pressed:
if self.vm is None: if self.vm is None:
raise RuntimeError("vm is None") raise RuntimeError("vm is None")
app = self.apps[self.selection] app = self.apps[self._sc.target_position()]
url = app["tarDownloadUrl"] url = app["tarDownloadUrl"]
name = app["name"] name = app["name"]
author = app["author"] author = app["author"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment