Skip to content
Snippets Groups Projects

Refactor Cart into checkerboard table

Merged Mateusz Kudela requested to merge mkudela/issue-173 into develop
Compare and Show latest version
1 file
+ 18
9
Compare changes
  • Side-by-side
  • Inline
@@ -211,6 +211,19 @@ class CartTable(CliveCheckerboardTable):
]
return self._rows
@staticmethod
def _create_widget_id_to_focus(event: CartItem.Focus | CartItem.Move) -> str:
assert event.button_to_focus is not None, "Button to focus has to be passed to get it's id."
return event.button_to_focus
def _disable_appropriate_button(self, widget: CartItem) -> None:
if len(self.app.world.profile.cart) > 0 and widget.reactive_idx == 0:
# disable first ButtomMoveUp if first element was removed
self.query(ButtonMoveUp)[0].disabled = True
if 0 < len(self.app.world.profile.cart) == widget.reactive_idx:
# disable last ButtonMoveDown if only last element was removed
self.query(ButtonMoveDown)[-1].disabled = True
def _handle_remove_event(self, triggering_widget: CartItem) -> None:
def devalue_indexes(rows: Sequence[CartItem]) -> None:
for row in rows:
@@ -243,13 +256,7 @@ class CartTable(CliveCheckerboardTable):
self.profile.cart.remove(event.widget.operation)
self._handle_remove_event(triggering_widget=event.widget)
self.app.trigger_profile_watchers()
if len(self.app.world.profile.cart) > 0 and event.widget.reactive_idx == 0:
# disable first ButtomMoveUp if first element was removed
self.query(ButtonMoveUp)[0].disabled = True
if 0 < len(self.app.world.profile.cart) == event.widget.reactive_idx:
# disable last ButtonMoveDown if only last element was removed
self.query(ButtonMoveDown)[-1].disabled = True
self._disable_appropriate_button(event.widget)
@on(CartItem.Move)
async def move_item(self, event: CartItem.Move) -> None:
@@ -264,7 +271,8 @@ class CartTable(CliveCheckerboardTable):
if event.to_idx == cart_item.reactive_idx:
self.app.set_focus(cart_item)
if event.button_to_focus:
cart_item.query_one(f"#{event.button_to_focus}").focus()
button_id = self._create_widget_id_to_focus(event)
cart_item.query_one(f"#{button_id}").focus()
@on(CartItem.Focus)
def focus_item(self, event: CartItem.Focus) -> None:
@@ -272,7 +280,8 @@ class CartTable(CliveCheckerboardTable):
if event.target_idx == cart_item.reactive_idx:
self.app.set_focus(cart_item)
if event.button_to_focus:
cart_item.query_one(f"#{event.button_to_focus}").focus()
button_id = self._create_widget_id_to_focus(event)
cart_item.query_one(f"#{button_id}").focus()
class Cart(BaseScreen):
Loading