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
+ 9
14
Compare changes
  • Side-by-side
  • Inline
from __future__ import annotations
import time
from typing import TYPE_CHECKING, Sequence
from textual import on
@@ -240,8 +239,9 @@ class Cart(BaseScreen):
def _handle_remove_event(self, triggering_widget: CartItem) -> None:
def devalue_indexes(rows: Sequence[CartItem]) -> None:
for row in rows:
row.reactive_idx = row.idx - 1
start_index = triggering_widget.idx
row.reactive_idx = row.reactive_idx - 1
start_index = triggering_widget.reactive_idx
rows = self.query(CartItem)[start_index:]
devalue_indexes(rows)
self._cart_table.set_evenness_styles(rows, starting_index=start_index)
@@ -264,24 +264,19 @@ class Cart(BaseScreen):
@on(CartItem.Delete)
async def remove_item(self, event: CartItem.Delete) -> None:
# logger.debug(f"REMOVE CLICKED, DEVALUATION IN PROGRESS?: {self._index_devaluation_in_progress}")
# if self._index_devaluation_in_progress:
# self.task.cancel()
# while self._index_devaluation_in_progress:
# logger.debug("DEVALUATION IN PROGRESS")
# logger.debug("DEVALUATION DONE")
# self.task.uncancel()
self._removal_in_progress = True
logger.debug(f"(DELETE STARTED), LEN OF ROWS: {len(self.query(CliveCheckerboardTableRow))}, IDX TO REMOVE: {event.widget.reactive_idx}")
await self.query(CliveCheckerboardTableRow)[event.widget.reactive_idx].remove()
self.profile_data.cart.remove(event.widget.operation)
self._handle_remove_event(triggering_widget=event.widget)
self.app.trigger_profile_data_watchers()
logger.debug("DELETE FINISHED")
self._removal_in_progress = False
if len(self.app.world.profile_data.cart) > 0 and event.widget.idx == 0:
if len(self.app.world.profile_data.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_data.cart) == event.widget.idx:
if 0 < len(self.app.world.profile_data.cart) == event.widget.reactive_idx:
# disable last ButtonMoveDown if only last element was removed
self.query(ButtonMoveDown)[-1].disabled = True
@@ -295,13 +290,13 @@ class Cart(BaseScreen):
self._update_values_of_swapped_rows(from_index=event.from_idx, to_index=event.to_idx)
# focus item that was moved
for cart_item in self.query(CartItem):
if event.to_idx == cart_item.idx:
if event.to_idx == cart_item.reactive_idx:
self.app.set_focus(cart_item)
@on(CartItem.Focus)
def focus_item(self, event: CartItem.Focus) -> None:
for cart_item in self.query(CartItem):
if event.target_idx == cart_item.idx:
if event.target_idx == cart_item.reactive_idx:
self.app.set_focus(cart_item)
if event.focus_button:
cart_item.query_one(f"#{event.focus_button}").focus()
Loading