Search results show mana icons in the list

This commit is contained in:
luxick
2017-02-16 14:31:18 +01:00
parent dd29cbea65
commit 9993c9646e
10 changed files with 58 additions and 17 deletions

1
gui.py
View File

@@ -35,6 +35,7 @@ class MainWindow(Gtk.Window):
win = MainWindow() win = MainWindow()
# Load local image Data # Load local image Data
util.reload_image_cache() util.reload_image_cache()
util.load_mana_icons()
win.connect('delete-event', Gtk.main_quit) win.connect('delete-event', Gtk.main_quit)
win.show_all() win.show_all()
Gtk.main() Gtk.main()

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -36,7 +36,7 @@ class SearchView(Gtk.Grid):
self.searchresults = Gtk.ScrolledWindow(hexpand=True, vexpand=True) self.searchresults = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
self.searchresults.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.searchresults.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
self.store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, str) self.store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, GdkPixbuf.Pixbuf)
self.list = Gtk.TreeView(self.store) self.list = Gtk.TreeView(self.store)
self.searchresults.add(self.list) self.searchresults.add(self.list)
@@ -50,18 +50,18 @@ class SearchView(Gtk.Grid):
info.set_property("wrap-width", 100) info.set_property("wrap-width", 100)
info.set_padding = 2 info.set_padding = 2
manacost = Gtk.CellRendererText() # manacost = Gtk.CellRendererText()
self.column1 = Gtk.TreeViewColumn(title="Image", cell_renderer=image, pixbuf=0) self.column1 = Gtk.TreeViewColumn(title="Image", cell_renderer=image, pixbuf=0)
self.column2 = Gtk.TreeViewColumn(title="Card Name", cell_renderer=title, text=1) self.column1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column2 = Gtk.TreeViewColumn(title="Name", cell_renderer=title, text=1)
self.column2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column3 = Gtk.TreeViewColumn(title="Card Text", cell_renderer=info, text=2) self.column3 = Gtk.TreeViewColumn(title="Card Text", cell_renderer=info, text=2)
self.column4 = Gtk.TreeViewColumn(title="Mana Cost", cell_renderer=manacost, text=3) self.column3.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column3.set_max_width(100) self.column3.set_resizable(True)
self.column3.set_expand(True)
self.column1.pack_start(image, True) self.column4 = Gtk.TreeViewColumn(title="Mana Cost", cell_renderer=image, pixbuf=3)
self.column2.pack_start(title, True) self.column4.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column3.pack_start(info, True)
self.column4.pack_start(manacost, True)
self.list.append_column(self.column1) self.list.append_column(self.column1)
self.list.append_column(self.column2) self.list.append_column(self.column2)
@@ -76,7 +76,7 @@ class SearchView(Gtk.Grid):
def online_search_clicked(self, button): def online_search_clicked(self, button):
term = self.searchEntry.get_text() term = self.searchEntry.get_text()
if not term == "": if not term == "":
print("Search for \"" + term + "\" online.") print("Search for \"" + term + "\" online. \n")
cards = Card.where(name=term).where(pageSize=50).where(page=1).all() cards = Card.where(name=term).where(pageSize=50).where(page=1).all()
self.store.clear() self.store.clear()
@@ -84,13 +84,16 @@ class SearchView(Gtk.Grid):
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([util.load_card_image(card), self.store.append([util.load_card_image(card),
card.name, card.name,
card.original_text, card.original_text,
card.mana_cost]) util.create_mana_icons(card.mana_cost)])
print("\n")
util.reload_image_cache() util.reload_image_cache()
def create_row_entry(self, card):
cardname = card.name

43
util.py
View File

@@ -1,8 +1,7 @@
import os import os
import gi import gi
import re
import config import config
gi.require_version('Gtk', '3.0') gi.require_version('Gtk', '3.0')
from gi.repository import GdkPixbuf from gi.repository import GdkPixbuf
from PIL import Image as PImage from PIL import Image as PImage
@@ -10,8 +9,21 @@ from urllib import request
# Loacally stored images for faster loading times # Loacally stored images for faster loading times
imagecache = [] imagecache = []
manaicons ={}
def load_mana_icons():
path = "resources/mana_icons/"
if not os.path.exists(path):
print("ERROR: Directory for mana icons not found")
return
# return array of icons
imagelist = os.listdir(path)
manaicons.clear()
for image in imagelist:
img = PImage.open(path + image)
manaicons[os.path.splitext(image)[0]] = img
def reload_image_cache(): def reload_image_cache():
if not os.path.exists(config.cachepath): if not os.path.exists(config.cachepath):
os.makedirs(config.cachepath) os.makedirs(config.cachepath)
@@ -44,8 +56,33 @@ def load_card_image(card):
for image in imagecache: for image in imagecache:
filename = os.path.basename(image.filename) filename = os.path.basename(image.filename)
if filename == card.multiverse_id.__str__() + ".PNG": if filename == card.multiverse_id.__str__() + ".PNG":
print("Using local file: " + filename) print("Using local file for image: " + filename)
return GdkPixbuf.Pixbuf.new_from_file_at_size(image.filename, 63 * 2, 88 * 2) return GdkPixbuf.Pixbuf.new_from_file_at_size(image.filename, 63 * 2, 88 * 2)
# No file in local cache found # No file in local cache found
return load_card_image_online(card) return load_card_image_online(card)
def create_mana_icons(mana_string):
# Convert the string to a List
list = re.findall("\{(.*?)\}", mana_string)
# Compute horizontal size for the final image
imagesize = len(list) * 105
image = PImage.new("RGBA", (imagesize, 105))
# incerment for each position of an icon (Workaround: 2 or more of the same icon will be rendered in the same poisition)
poscounter = 0
# Go through all entries an add the correspondent icon to the final image
for icon in list:
xpos = poscounter * 105
loaded = manaicons.get(icon)
if loaded is None:
print("ERROR: No icon file named \"" + icon + "\" found.")
else:
image.paste(loaded, (xpos, 0))
poscounter += 1
image.save(config.cachepath + "manaicon.png", "PNG")
pixbuf = GdkPixbuf.Pixbuf.new_from_file(config.cachepath + "manaicon.png")
pixbuf = pixbuf.scale_simple(image.width / 5, image.height / 5, GdkPixbuf.InterpType.HYPER)
os.remove(config.cachepath + "manaicon.png")
return pixbuf