New filter: Sets

This commit is contained in:
luxick
2017-02-22 14:33:23 +01:00
parent 95741e3ad1
commit df8eacf4b9
3 changed files with 73 additions and 21 deletions

View File

@@ -19,6 +19,8 @@ class MainWindow(Gtk.Window):
# Set reference to main window in util # Set reference to main window in util
util.window = self util.window = self
util.load_sets()
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.add(vbox) self.add(vbox)
self.notebook = Gtk.Notebook() self.notebook = Gtk.Notebook()

View File

@@ -15,6 +15,7 @@ class SearchView(Gtk.Grid):
def __init__(self): def __init__(self):
Gtk.Grid.__init__(self) Gtk.Grid.__init__(self)
self.set_column_spacing(5) self.set_column_spacing(5)
# 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)
@@ -59,6 +60,12 @@ class SearchView(Gtk.Grid):
self.color_chooser.attach(self.green_mana_button, 1, 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.color_chooser.attach(self.colorless_mana_button, 2, 2, 1, 1)
# Text renderer for the Combo Boxes
renderer_text = Gtk.CellRendererText()
renderer_text.set_property("wrap-mode", Pango.WrapMode.WORD)
renderer_text.set_property("wrap-width", 50)
renderer_text.props.ellipsize = Pango.EllipsizeMode.END
# Rarity # Rarity
rarity_label = Gtk.Label("Rarity", xalign=0) rarity_label = Gtk.Label("Rarity", xalign=0)
self.rarity_store = Gtk.ListStore(str, str) self.rarity_store = Gtk.ListStore(str, str)
@@ -68,14 +75,32 @@ class SearchView(Gtk.Grid):
self.rarity_store.append(["rare", "Rare"]) self.rarity_store.append(["rare", "Rare"])
self.rarity_store.append(["mythic rare", "Mythic Rare"]) self.rarity_store.append(["mythic rare", "Mythic Rare"])
self.rarity_combo = Gtk.ComboBox.new_with_model(self.rarity_store) self.rarity_combo = Gtk.ComboBox.new_with_model(self.rarity_store)
renderer_text = Gtk.CellRendererText()
self.rarity_combo.pack_start(renderer_text, True) self.rarity_combo.pack_start(renderer_text, True)
self.rarity_combo.add_attribute(renderer_text, "text", 1) self.rarity_combo.add_attribute(renderer_text, "text", 1)
# Set
set_label = Gtk.Label("Set", xalign=0)
self.set_store = Gtk.ListStore(str, str)
self.set_store.append(["", "Any"])
for set in util.set_list:
self.set_store.append([set.code, set.name])
self.set_combo = Gtk.ComboBox.new_with_model_and_entry(self.set_store)
self.set_combo.pack_start(renderer_text, True)
self.set_combo.add_attribute(renderer_text, "text", 1)
self.set_combo.set_entry_text_column(1)
# Autocomplete search in Set Combobox
completer = Gtk.EntryCompletion()
completer.set_model(self.set_store)
completer.set_text_column(1)
completer.connect("match-selected", self.match_selected)
self.set_combo.get_child().set_completion(completer)
#Type
type_label = Gtk.Label("Type", xalign=0) type_label = Gtk.Label("Type", xalign=0)
self.type_store = Gtk.ListStore(str) self.type_store = Gtk.ListStore(str)
types = [ "Any", "Creature", "Artifact", "Instant", types = [ "Any", "Creature", "Artifact", "Instant",
"Aura", "Enchantment", "Sorcery", "Land", "Planeswalker"] "Enchantment", "Sorcery", "Land", "Planeswalker"]
for cardtype in types: for cardtype in types:
self.type_store.append([cardtype]) self.type_store.append([cardtype])
self.type_combo = Gtk.ComboBox.new_with_model(self.type_store) self.type_combo = Gtk.ComboBox.new_with_model(self.type_store)
@@ -85,9 +110,13 @@ class SearchView(Gtk.Grid):
self.additional_filters = Gtk.Grid(row_spacing=5, column_spacing=5) self.additional_filters = Gtk.Grid(row_spacing=5, column_spacing=5)
self.additional_filters.attach(rarity_label, 0, 0, 1, 1) self.additional_filters.attach(rarity_label, 0, 0, 1, 1)
self.additional_filters.attach(self.rarity_combo, 1, 0, 1, 1) self.additional_filters.attach(self.rarity_combo, 1, 0, 1, 1)
self.additional_filters.attach(type_label, 0, 1, 1, 1) self.additional_filters.attach(type_label, 0, 1, 1, 1)
self.additional_filters.attach(self.type_combo, 1 ,1, 1, 1) self.additional_filters.attach(self.type_combo, 1 ,1, 1, 1)
self.additional_filters.attach(set_label, 0, 2, 1, 1)
self.additional_filters.attach(self.set_combo, 1, 2, 1, 1)
self.filters_title = Gtk.Label(xalign=0, yalign=0) self.filters_title = Gtk.Label(xalign=0, yalign=0)
self.filters_title.set_markup("<big>Filter search results</big>") self.filters_title.set_markup("<big>Filter search results</big>")
@@ -152,6 +181,9 @@ class SearchView(Gtk.Grid):
self.selection = self.list.get_selection() self.selection = self.list.get_selection()
self.selection.connect("changed", self.on_card_selected) self.selection.connect("changed", self.on_card_selected)
def match_selected(self, completion, model, iter):
self.set_combo.set_active_iter(iter)
def do_show_no_results(self, searchterm): def do_show_no_results(self, searchterm):
# Should move to main UI, so parent can be used # Should move to main UI, so parent can be used
dialog = Gtk.MessageDialog(self.parent, 0, Gtk.MessageType.INFO, dialog = Gtk.MessageDialog(self.parent, 0, Gtk.MessageType.INFO,
@@ -160,19 +192,6 @@ class SearchView(Gtk.Grid):
dialog.run() dialog.run()
dialog.destroy() dialog.destroy()
def do_activate_controls(self, active):
self.searchEntry.set_editable(active)
self.searchEntry.set_sensitive(active)
self.searchbutton.set_sensitive(active)
self.red_mana_button.set_sensitive(active)
self.blue_mana_button.set_sensitive(active)
self.black_mana_button.set_sensitive(active)
self.green_mana_button.set_sensitive(active)
self.white_mana_button.set_sensitive(active)
self.colorless_mana_button.set_sensitive(active)
self.rarity_combo.set_sensitive(active)
self.type_combo.set_sensitive(active)
def online_search_clicked(self, button): def online_search_clicked(self, button):
# Clear old data from liststore # Clear old data from liststore
self.store.clear() self.store.clear()
@@ -202,6 +221,9 @@ class SearchView(Gtk.Grid):
if typefilter == "Any": if typefilter == "Any":
typefilter = "" typefilter = ""
tree_iter = self.set_combo.get_active_iter()
setfilter = self.set_store.get_value(tree_iter, 0)
# Load card info from internet # Load card info from internet
print("\nStart online search") print("\nStart online search")
GObject.idle_add(util.push_status, "Searching for cards", priorty=GObject.PRIORITY_DEFAULT) GObject.idle_add(util.push_status, "Searching for cards", priorty=GObject.PRIORITY_DEFAULT)
@@ -209,6 +231,7 @@ class SearchView(Gtk.Grid):
self.cards = Card.where(name=term)\ self.cards = Card.where(name=term)\
.where(colorIdentity=",".join(colorlist)) \ .where(colorIdentity=",".join(colorlist)) \
.where(types=typefilter)\ .where(types=typefilter)\
.where(set=setfilter)\
.where(rarity=rarityfilter) \ .where(rarity=rarityfilter) \
.where(pageSize=50)\ .where(pageSize=50)\
.where(page=1).all() .where(page=1).all()
@@ -252,10 +275,6 @@ class SearchView(Gtk.Grid):
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
+ " (" + card.multiverse_id.__str__() + ")")
print("Types: " + str(card.type))
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,
@@ -314,3 +333,18 @@ class SearchView(Gtk.Grid):
# Set default rarity and type filters to "Any" # Set default rarity and type filters to "Any"
self.rarity_combo.set_active(0) self.rarity_combo.set_active(0)
self.type_combo.set_active(0) self.type_combo.set_active(0)
self.set_combo.set_active(0)
def do_activate_controls(self, active):
self.searchEntry.set_editable(active)
self.searchEntry.set_sensitive(active)
#self.searchbutton.set_sensitive(active)
self.red_mana_button.set_sensitive(active)
self.blue_mana_button.set_sensitive(active)
self.black_mana_button.set_sensitive(active)
self.green_mana_button.set_sensitive(active)
self.white_mana_button.set_sensitive(active)
self.colorless_mana_button.set_sensitive(active)
self.rarity_combo.set_sensitive(active)
self.type_combo.set_sensitive(active)
self.set_combo.set_sensitive(active)

View File

@@ -6,14 +6,29 @@ gi.require_version('Gtk', '3.0')
from gi.repository import GdkPixbuf, Gtk from gi.repository import GdkPixbuf, Gtk
from PIL import Image as PImage from PIL import Image as PImage
from urllib import request from urllib import request
from mtgsdk import Set
from urllib.error import URLError
# Loacally stored images for faster loading times # Loacally stored images for faster loading times
imagecache = [] imagecache = []
manaicons ={} manaicons = {}
set_list = []
window = None window = None
status_bar = None status_bar = None
def load_sets():
#setfile = os.open(config.cachepath + "/sets")
try:
sets = Set.all()
except URLError as err:
show_message("Connection Error", str(err.reason))
return
for set in sets:
set_list.append(set)
def push_status(msg): def push_status(msg):
status_bar.push(0, msg) status_bar.push(0, msg)
@@ -58,13 +73,14 @@ def load_dummy_image(sizex, sizey):
return GdkPixbuf.Pixbuf.new_from_file_at_size(os.path.dirname(__file__) + return GdkPixbuf.Pixbuf.new_from_file_at_size(os.path.dirname(__file__) +
'/resources/images/dummy.jpg', sizex, sizey) '/resources/images/dummy.jpg', sizex, sizey)
def load_card_image_online(card, sizex, sizey): def load_card_image_online(card, sizex, sizey):
url = card.image_url url = card.image_url
if url is None: if url is None:
print("No Image URL provided") print("No Image URL provided")
return load_dummy_image(sizex, sizey) return load_dummy_image(sizex, sizey)
filename = config.cachepath + card.multiverse_id.__str__() + ".PNG" filename = config.cachepath + card.multiverse_id.__str__() + ".PNG"
print("Loading image from: " + url) print("Loading image for " + card.name + "from: " + url)
response = request.urlretrieve(url, filename) response = request.urlretrieve(url, filename)
return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, sizex, sizey) return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, sizex, sizey)