Skip to content

Commit

Permalink
Merge branch 'logic_tooltips' of https://github.com/robojumper/sshd-r…
Browse files Browse the repository at this point in the history
…ando into logic_tooltips
  • Loading branch information
YourAverageLink committed Jun 14, 2024
2 parents 8a5fcca + e799ddd commit 18fe197
Showing 1 changed file with 37 additions and 10 deletions.
47 changes: 37 additions & 10 deletions gui/components/tracker_location_label.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ def mouseMoveEvent(self, ev: QMouseEvent) -> None:

def get_tooltip_text(self) -> str:
req = self.location.computed_requirement
sort_requirement(req)
match req.type:
case RequirementType.AND:
# Computed requirements have a top-level AND requirement
Expand Down Expand Up @@ -239,10 +240,8 @@ def format_requirement(self, req: Requirement, is_top_level=True) -> str:
else "red"
)
# Get a pretty name for the item if it is the first stage of a progressive item
item = req.args[0].name
if (pretty_name := PRETTY_ITEM_NAMES.get((item, 1), None)) is not None:
item = pretty_name
return f'<span style="color:{color}">{item}</span>'
name = pretty_name(req.args[0].name, 1)
return f'<span style="color:{color}">{name}</span>'
case RequirementType.COUNT:
# Determine if the user has enough of this item marked
color = (
Expand All @@ -253,12 +252,8 @@ def format_requirement(self, req: Requirement, is_top_level=True) -> str:
else "red"
)
# Get a pretty name for the progressive item
item = req.args[1].name
if (
pretty_name := PRETTY_ITEM_NAMES.get((item, req.args[0]), None)
) is None:
pretty_name = f"{item} x {req.args[0]}"
return f'<span style="color:{color}">{pretty_name}</span>'
name = pretty_name(req.args[1].name, req.args[0])
return f'<span style="color:{color}">{name}</span>'
case RequirementType.WALLET_CAPACITY:
# Determine if the user has enough wallet capacity for this requirement
color = (
Expand Down Expand Up @@ -300,3 +295,35 @@ def format_requirement(self, req: Requirement, is_top_level=True) -> str:
)
case _:
raise ValueError("unreachable")


def sort_requirement(req: Requirement):
def by_length(req: Requirement):
if req.type == RequirementType.AND or req.type == RequirementType.OR:
return len(req.args)
return -1

def by_item(req: Requirement):
if req.type == RequirementType.ITEM:
return pretty_name(req.args[0].name, 1)
elif req.type == RequirementType.COUNT:
return pretty_name(req.args[1].name, req.args[0])
return ""

def sort_key(req: Requirement):
return (by_length(req), by_item(req))

if req.type == RequirementType.AND or req.type == RequirementType.OR:
for expr in req.args:
sort_requirement(expr)
req.args.sort(key=sort_key)


def pretty_name(item, count):
if (pretty_name := PRETTY_ITEM_NAMES.get((item, count), None)) is not None:
return pretty_name

if count > 1:
return f"{item} x {count}"
else:
return item

0 comments on commit 18fe197

Please sign in to comment.