Add search filter for card colors
This commit is contained in:
@@ -17,8 +17,6 @@ class SearchView(Gtk.Grid):
|
|||||||
Gtk.Grid.__init__(self)
|
Gtk.Grid.__init__(self)
|
||||||
self.set_column_spacing(5)
|
self.set_column_spacing(5)
|
||||||
|
|
||||||
self.cancelSearch = False
|
|
||||||
|
|
||||||
# Search Box
|
# Search Box
|
||||||
self.searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5,
|
self.searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5,
|
||||||
margin_end=5, margin_start=5, margin_top=5, margin_bottom=5)
|
margin_end=5, margin_start=5, margin_top=5, margin_bottom=5)
|
||||||
@@ -34,15 +32,38 @@ class SearchView(Gtk.Grid):
|
|||||||
self.searchbox.add(Gtk.HSeparator())
|
self.searchbox.add(Gtk.HSeparator())
|
||||||
|
|
||||||
# Filters
|
# Filters
|
||||||
self.filterBox = Gtk.ListBox()
|
self.mana_filter_label = Gtk.Label("Mana Color", xalign=0, yalign=0)
|
||||||
self.filterBox.set_selection_mode(Gtk.SelectionMode.NONE)
|
self.red_mana_button = Gtk.ToggleButton(name="R", active=True)
|
||||||
|
self.red_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
self.blue_mana_button = Gtk.ToggleButton(name="U", active=True)
|
||||||
|
self.blue_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
self.green_mana_button = Gtk.ToggleButton(name="G", active=True)
|
||||||
|
self.green_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
self.black_mana_button = Gtk.ToggleButton(name="B", active=True)
|
||||||
|
self.black_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
self.white_mana_button = Gtk.ToggleButton(name="W", active=True)
|
||||||
|
self.white_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
self.colorless_mana_button = Gtk.ToggleButton(name="C", active=True)
|
||||||
|
self.colorless_mana_button.connect("toggled", self.mana_toggled)
|
||||||
|
# Set all Buttons active
|
||||||
|
self.init_mana_buttons()
|
||||||
|
|
||||||
self.testRow = Gtk.ListBoxRow()
|
self.color_chooser = Gtk.Grid(row_spacing=5, column_spacing=5)
|
||||||
hbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=50)
|
self.color_chooser.attach(self.mana_filter_label, 0, 0, 5, 1)
|
||||||
hbox.add(Gtk.Label("Filters will go here", xalign=0.5, yalign=0.5))
|
self.color_chooser.attach(self.white_mana_button, 0, 1, 1, 1)
|
||||||
self.testRow.add(hbox)
|
self.color_chooser.attach(self.blue_mana_button, 1, 1, 1, 1)
|
||||||
|
self.color_chooser.attach(self.black_mana_button, 2, 1, 1, 1)
|
||||||
|
self.color_chooser.attach(self.red_mana_button, 0, 2, 1, 1)
|
||||||
|
self.color_chooser.attach(self.green_mana_button, 1, 2, 1, 1)
|
||||||
|
self.color_chooser.attach(self.colorless_mana_button, 2, 2, 1, 1)
|
||||||
|
|
||||||
self.filterBox.add(self.testRow)
|
self.filters_title = Gtk.Label(xalign=0, yalign=0)
|
||||||
|
self.filters_title.set_markup("<big>Filter search results</big>")
|
||||||
|
|
||||||
|
self.filters = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5,
|
||||||
|
margin_end=5, margin_start=5, margin_top=5, margin_bottom=5)
|
||||||
|
self.filters.add(self.filters_title)
|
||||||
|
self.filters.add(self.color_chooser)
|
||||||
|
|
||||||
# Card List
|
# Card List
|
||||||
self.searchresults = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
|
self.searchresults = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
|
||||||
@@ -86,7 +107,7 @@ class SearchView(Gtk.Grid):
|
|||||||
self.details = details.DetailBar()
|
self.details = details.DetailBar()
|
||||||
# Bring it all together
|
# Bring it all together
|
||||||
self.attach(self.searchbox, 0, 0, 1, 1)
|
self.attach(self.searchbox, 0, 0, 1, 1)
|
||||||
self.attach(self.filterBox, 0, 1, 1, 1)
|
self.attach(self.filters, 0, 1, 1, 1)
|
||||||
self.attach(self.searchresults, 2, 0, 1, 2)
|
self.attach(self.searchresults, 2, 0, 1, 2)
|
||||||
self.attach(self.details, 4, 0, 1, 2)
|
self.attach(self.details, 4, 0, 1, 2)
|
||||||
|
|
||||||
@@ -108,43 +129,48 @@ class SearchView(Gtk.Grid):
|
|||||||
threading.Thread(target=self.load_cards).start()
|
threading.Thread(target=self.load_cards).start()
|
||||||
|
|
||||||
def load_cards(self):
|
def load_cards(self):
|
||||||
|
|
||||||
term = self.searchEntry.get_text()
|
term = self.searchEntry.get_text()
|
||||||
if not term == "":
|
print("Search for \"" + term + "\" online.")
|
||||||
print("Search for \"" + term + "\" online. \n")
|
colorlist = self.get_color_filter()
|
||||||
|
print("Filtering color(s): " + ','.join(colorlist) + "\n")
|
||||||
|
|
||||||
self.cards = Card.where(name=term).where(pageSize=50).where(page=1).all()
|
# Load card info from internet
|
||||||
|
self.cards = Card.where(name=term)\
|
||||||
|
.where(colorIdentity=','.join(colorlist))\
|
||||||
|
.where(pageSize=50)\
|
||||||
|
.where(page=1).all()
|
||||||
|
|
||||||
# Remove duplicate entries
|
# Remove duplicate entries
|
||||||
if config.show_from_all_sets is False:
|
if config.show_from_all_sets is False:
|
||||||
counter = 0
|
counter = 0
|
||||||
unique_cards = []
|
unique_cards = []
|
||||||
unique_names = []
|
unique_names = []
|
||||||
# Reverse cardlist so we get the version with the most modern art
|
# Reverse cardlist so we get the version with the most modern art
|
||||||
for card in reversed(self.cards):
|
for card in reversed(self.cards):
|
||||||
if card.name not in unique_names:
|
if card.name not in unique_names:
|
||||||
unique_names.append(card.name)
|
unique_names.append(card.name)
|
||||||
unique_cards.append(card)
|
unique_cards.append(card)
|
||||||
else:
|
else:
|
||||||
counter += 1
|
counter += 1
|
||||||
self.cards.clear()
|
self.cards.clear()
|
||||||
for unique_card in reversed(unique_cards):
|
for unique_card in reversed(unique_cards):
|
||||||
self.cards.append(unique_card)
|
self.cards.append(unique_card)
|
||||||
|
|
||||||
print("Removed " + str(counter) + " duplicate entries")
|
print("Removed " + str(counter) + " duplicate entries")
|
||||||
|
|
||||||
for card in self.cards:
|
for card in self.cards:
|
||||||
if card.multiverse_id is not None:
|
if card.multiverse_id is not None:
|
||||||
print("Found: " + card.name
|
print("Found: " + card.name
|
||||||
+ " (" + card.multiverse_id.__str__() + ")")
|
+ " (" + card.multiverse_id.__str__() + ")")
|
||||||
|
|
||||||
self.store.append([card.multiverse_id,
|
self.store.append([card.multiverse_id,
|
||||||
util.load_card_image(card, 63 * 2, 88 * 2),
|
util.load_card_image(card, 63 * 2, 88 * 2),
|
||||||
card.name,
|
card.name,
|
||||||
card.original_text,
|
card.original_text,
|
||||||
util.create_mana_icons(card.mana_cost)])
|
util.create_mana_icons(card.mana_cost)])
|
||||||
print("\n")
|
print("")
|
||||||
util.reload_image_cache()
|
|
||||||
|
util.reload_image_cache()
|
||||||
self.searchEntry.set_editable(True)
|
self.searchEntry.set_editable(True)
|
||||||
self.searchbutton.set_sensitive(True)
|
self.searchbutton.set_sensitive(True)
|
||||||
|
|
||||||
@@ -160,3 +186,41 @@ class SearchView(Gtk.Grid):
|
|||||||
selected_card = card
|
selected_card = card
|
||||||
if selected_card is not None:
|
if selected_card is not None:
|
||||||
self.details.set_card_detail(selected_card)
|
self.details.set_card_detail(selected_card)
|
||||||
|
|
||||||
|
def get_color_filter(self):
|
||||||
|
colorlist = []
|
||||||
|
|
||||||
|
if not self.white_mana_button.get_active():
|
||||||
|
colorlist.append("W")
|
||||||
|
if not self.blue_mana_button.get_active():
|
||||||
|
colorlist.append("U")
|
||||||
|
if not self.black_mana_button.get_active():
|
||||||
|
colorlist.append("B")
|
||||||
|
if not self.red_mana_button.get_active():
|
||||||
|
colorlist.append("R")
|
||||||
|
if not self.green_mana_button.get_active():
|
||||||
|
colorlist.append("G")
|
||||||
|
if not self.colorless_mana_button.get_active():
|
||||||
|
colorlist.append("C")
|
||||||
|
return colorlist
|
||||||
|
|
||||||
|
def mana_toggled(self, toggle_button):
|
||||||
|
iconname = ""
|
||||||
|
if not toggle_button.get_active():
|
||||||
|
iconname = "{" + toggle_button.get_name() + "}"
|
||||||
|
else:
|
||||||
|
iconname = "{" + toggle_button.get_name() + "_alt}"
|
||||||
|
image = Gtk.Image()
|
||||||
|
image.set_from_pixbuf(util.create_mana_icons(iconname))
|
||||||
|
toggle_button.set_image(image)
|
||||||
|
|
||||||
|
def init_mana_buttons(self):
|
||||||
|
# Toggle each Button to deactivate filter an load icon
|
||||||
|
self.red_mana_button.toggled()
|
||||||
|
self.blue_mana_button.toggled()
|
||||||
|
self.green_mana_button.toggled()
|
||||||
|
self.black_mana_button.toggled()
|
||||||
|
self.white_mana_button.toggled()
|
||||||
|
self.colorless_mana_button.toggled()
|
||||||
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user