New filter: Sets
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user