Add a 'finished' inv view filter
This commit is contained in:
1 parent
f919850ad2
commit
3dbe1f02be
2 files changed
+38
-17
No files matched your search
@@ -921,28 +921,44 @@ class InventoryOverview:
|
|||||||
def __init__(self, manager: GUIManager, master: ttk.Widget):
|
def __init__(self, manager: GUIManager, master: ttk.Widget):
|
||||||
self._cache = manager._cache
|
self._cache = manager._cache
|
||||||
self._filters = {
|
self._filters = {
|
||||||
"notlinked": IntVar(master, 0),
|
"linked": IntVar(master, 1),
|
||||||
"expired": IntVar(master, 1),
|
"expired": IntVar(master, 1),
|
||||||
"upcoming": IntVar(master, 1),
|
"upcoming": IntVar(master, 1),
|
||||||
|
"finished": IntVar(master, 1),
|
||||||
}
|
}
|
||||||
# Filtering options
|
# Filtering options
|
||||||
filter_frame = ttk.LabelFrame(master, text="Filter", padding=(4, 0, 4, 4))
|
filter_frame = ttk.LabelFrame(master, text="Filter", padding=(4, 0, 4, 4))
|
||||||
LABEL_SPACING = 20
|
LABEL_SPACING = 20
|
||||||
filter_frame.grid(column=0, row=0, columnspan=2, sticky="nsew")
|
filter_frame.grid(column=0, row=0, columnspan=2, sticky="nsew")
|
||||||
ttk.Label(filter_frame, text="Show:", padding=(0, 0, 10, 0)).grid(column=0, row=0)
|
ttk.Label(filter_frame, text="Show:", padding=(0, 0, 10, 0)).grid(column=0, row=0)
|
||||||
ttk.Checkbutton(filter_frame, variable=self._filters["notlinked"]).grid(column=1, row=0)
|
icolumn = 0
|
||||||
|
ttk.Checkbutton(
|
||||||
|
filter_frame, variable=self._filters["linked"]
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Label(
|
ttk.Label(
|
||||||
filter_frame, text="Not linked", padding=(0, 0, LABEL_SPACING, 0)
|
filter_frame, text="Linked", padding=(0, 0, LABEL_SPACING, 0)
|
||||||
).grid(column=2, row=0)
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Checkbutton(filter_frame, variable=self._filters["expired"]).grid(column=3, row=0)
|
ttk.Checkbutton(
|
||||||
|
filter_frame, variable=self._filters["expired"]
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Label(
|
ttk.Label(
|
||||||
filter_frame, text="Expired", padding=(0, 0, LABEL_SPACING, 0)
|
filter_frame, text="Expired", padding=(0, 0, LABEL_SPACING, 0)
|
||||||
).grid(column=4, row=0)
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Checkbutton(filter_frame, variable=self._filters["upcoming"]).grid(column=5, row=0)
|
ttk.Checkbutton(
|
||||||
|
filter_frame, variable=self._filters["upcoming"]
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Label(
|
ttk.Label(
|
||||||
filter_frame, text="Upcoming", padding=(0, 0, LABEL_SPACING, 0)
|
filter_frame, text="Upcoming", padding=(0, 0, LABEL_SPACING, 0)
|
||||||
).grid(column=6, row=0)
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
ttk.Button(filter_frame, text="Refresh", command=self.refresh).grid(column=7, row=0)
|
ttk.Checkbutton(
|
||||||
|
filter_frame, variable=self._filters["finished"]
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
|
ttk.Label(
|
||||||
|
filter_frame, text="Finished", padding=(0, 0, LABEL_SPACING, 0)
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
|
ttk.Button(
|
||||||
|
filter_frame, text="Refresh", command=self.refresh
|
||||||
|
).grid(column=(icolumn := icolumn + 1), row=0)
|
||||||
# Inventory view
|
# Inventory view
|
||||||
self._canvas = tk.Canvas(master, scrollregion=(0, 0, 0, 0))
|
self._canvas = tk.Canvas(master, scrollregion=(0, 0, 0, 0))
|
||||||
self._canvas.grid(column=0, row=1, sticky="nsew")
|
self._canvas.grid(column=0, row=1, sticky="nsew")
|
||||||
@@ -966,13 +982,14 @@ class InventoryOverview:
|
|||||||
def _update_visibility(self, campaign: DropsCampaign):
|
def _update_visibility(self, campaign: DropsCampaign):
|
||||||
# True if the campaign is supposed to show, False makes it hidden.
|
# True if the campaign is supposed to show, False makes it hidden.
|
||||||
frame = self._campaigns[campaign]
|
frame = self._campaigns[campaign]
|
||||||
|
linked = bool(self._filters["linked"].get())
|
||||||
|
expired = bool(self._filters["expired"].get())
|
||||||
|
upcoming = bool(self._filters["upcoming"].get())
|
||||||
|
finished = bool(self._filters["finished"].get())
|
||||||
if (
|
if (
|
||||||
(campaign.linked or self._filters["notlinked"].get())
|
(not linked or campaign.linked)
|
||||||
and (
|
and (campaign.active or upcoming and campaign.upcoming or expired and campaign.expired)
|
||||||
campaign.active
|
and (finished or not campaign.finished)
|
||||||
or self._filters["expired"].get() and campaign.expired
|
|
||||||
or self._filters["upcoming"].get() and campaign.upcoming
|
|
||||||
)
|
|
||||||
):
|
):
|
||||||
frame.grid()
|
frame.grid()
|
||||||
else:
|
else:
|
||||||
|
|||||||
+6
-2
@@ -252,6 +252,10 @@ class DropsCampaign:
|
|||||||
def total_drops(self) -> int:
|
def total_drops(self) -> int:
|
||||||
return len(self.timed_drops)
|
return len(self.timed_drops)
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def finished(self) -> bool:
|
||||||
|
return all(d.is_claimed for d in self.drops)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def claimed_drops(self) -> int:
|
def claimed_drops(self) -> int:
|
||||||
return sum(d.is_claimed for d in self.drops)
|
return sum(d.is_claimed for d in self.drops)
|
||||||
@@ -262,14 +266,14 @@ class DropsCampaign:
|
|||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def remaining_minutes(self) -> int:
|
def remaining_minutes(self) -> int:
|
||||||
return sum(d.remaining_minutes for d in self.timed_drops.values())
|
return sum(d.remaining_minutes for d in self.drops)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def progress(self) -> float:
|
def progress(self) -> float:
|
||||||
return sum(d.progress for d in self.drops) / self.total_drops
|
return sum(d.progress for d in self.drops) / self.total_drops
|
||||||
|
|
||||||
def _on_claim(self) -> None:
|
def _on_claim(self) -> None:
|
||||||
invalidate_cache(self, "claimed_drops", "remaining_drops")
|
invalidate_cache(self, "finished", "claimed_drops", "remaining_drops")
|
||||||
for drop in self.drops:
|
for drop in self.drops:
|
||||||
drop._on_claim()
|
drop._on_claim()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user