From c7275f9457f238ee22f9e787ca50102457590428 Mon Sep 17 00:00:00 2001 From: luxick Date: Fri, 17 Feb 2017 00:54:59 +0100 Subject: [PATCH] Detail view on seach screen show card rules --- mtg-collector/details.py | 77 ++++++++++++++---- mtg-collector/gui.py | 1 + mtg-collector/mtg-collector | 3 - .../resources/mana_icons/{w.png => W.png} | Bin mtg-collector/search.py | 32 +++++--- mtg-collector/util.py | 8 +- 6 files changed, 87 insertions(+), 34 deletions(-) delete mode 100644 mtg-collector/mtg-collector rename mtg-collector/resources/mana_icons/{w.png => W.png} (100%) diff --git a/mtg-collector/details.py b/mtg-collector/details.py index 171fc97..1f4a38a 100644 --- a/mtg-collector/details.py +++ b/mtg-collector/details.py @@ -1,26 +1,73 @@ import gi gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GdkPixbuf +from gi.repository import Gtk, Pango import util -class DetailBar(Gtk.Grid): +class DetailBar(Gtk.ScrolledWindow): def __init__(self): - Gtk.Grid.__init__(self) + Gtk.ScrolledWindow.__init__(self) + self.grid = Gtk.Grid() + self.grid.set_row_spacing(10) + self.add(self.grid) + self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) - self.image_area = Gtk.Box() - image = Gtk.Image() - pixbuf = util.add_test_image(63 * 5, 88 * 5) - image.set_from_pixbuf(pixbuf) - self.image_area.add(image) + # Create area for big card an fill it with a dummy image + self.image_area = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + self.bigcard = Gtk.Image() + pixbuf = util.load_dummy_image(63 * 5, 88 * 5) + self.bigcard.set_from_pixbuf(pixbuf) + self.image_area.add(self.bigcard) + self.image_area.add(Gtk.HSeparator()) - self.carddetails = Gtk.ListBox() - self.carddetails.set_selection_mode(Gtk.SelectionMode.NONE) + # Build the additional info pane + self.carddetails = Gtk.Grid() + self.carddetails.set_row_spacing(5) + self.carddetails.set_column_spacing(5) - self.rulings = Gtk.ListBoxRow() - self.rulings.add(Gtk.Label("Test")) + # Card rules + self.rulingslabel = Gtk.Label(xalign=0, yalign=0) + self.rulingslabel.set_markup("Rules:") + self.rulingslabel.set_no_show_all(True) - self.carddetails.add(self.rulings) + self.rulesstore = Gtk.ListStore(str, str) + self.rulings = Gtk.TreeView(self.rulesstore) + self.rulings.set_rules_hint(True) - self.attach(self.image_area, 0, 0, 1, 1) - self.attach(self.carddetails, 0, 1, 1, 1) + self.renderer = Gtk.CellRendererText(xalign=0, yalign=0) + self.renderer.set_padding(5, 5) + self.renderer.set_property("wrap-mode", Pango.WrapMode.WORD) + # Ugly. Cannot set wrap width dynamically + self.renderer.set_property("wrap-width", 220) + + self.date_column = Gtk.TreeViewColumn(title="Date", cell_renderer=self.renderer, text=0) + self.rule_column = Gtk.TreeViewColumn(title="Rule", cell_renderer=self.renderer, text=1) + self.date_column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + self.rule_column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + self.rule_column.set_expand(True) + + self.rulings.append_column(self.date_column) + self.rulings.append_column(self.rule_column) + + # Build info pane under big card + self.carddetails.attach(self.rulingslabel, 0, 0, 1, 1) + self.carddetails.attach(self.rulings, 0, 1, 1, 1) + + self.grid.attach(self.image_area, 0, 0, 1, 1) + self.grid.attach(self.carddetails, 0, 1, 1, 1) + + def update_big_card(self, card): + pixbuf = util.load_card_image(card, 63 * 5, 88 * 5) + self.bigcard.set_from_pixbuf(pixbuf) + + def set_card_detail(self, card): + print("Loading infos for \"" + card.name + "\"") + + self.update_big_card(card) + self.rulesstore.clear() + self.rulingslabel.set_visible(False) + + if card.rulings is not None: + self.rulingslabel.set_visible(True) + for rule in card.rulings: + self.rulesstore.append([rule.get('date'), rule.get('text')]) \ No newline at end of file diff --git a/mtg-collector/gui.py b/mtg-collector/gui.py index 67946d1..406c0af 100644 --- a/mtg-collector/gui.py +++ b/mtg-collector/gui.py @@ -33,6 +33,7 @@ class MainWindow(Gtk.Window): self.notebook.append_page(self.collectionView, Gtk.Label("Collection")) self.notebook.append_page(self.deckView, Gtk.Label("Decks")) + win = MainWindow() win.connect('delete-event', Gtk.main_quit) win.show_all() diff --git a/mtg-collector/mtg-collector b/mtg-collector/mtg-collector deleted file mode 100644 index 8dd3de3..0000000 --- a/mtg-collector/mtg-collector +++ /dev/null @@ -1,3 +0,0 @@ -#! /usr/bin/env python -import os -os.s.path.dirname(__file__) + "/mtg-collector/gui.py" \ No newline at end of file diff --git a/mtg-collector/resources/mana_icons/w.png b/mtg-collector/resources/mana_icons/W.png similarity index 100% rename from mtg-collector/resources/mana_icons/w.png rename to mtg-collector/resources/mana_icons/W.png diff --git a/mtg-collector/search.py b/mtg-collector/search.py index 80d96dc..6c99769 100644 --- a/mtg-collector/search.py +++ b/mtg-collector/search.py @@ -10,14 +10,17 @@ from mtgsdk import Card class SearchView(Gtk.Grid): def __init__(self): Gtk.Grid.__init__(self) + self.set_column_spacing(5) # Search Box - self.searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2) + self.searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, + margin_end=5, margin_start=5, margin_top=5, margin_bottom=5) self.searchEntry = Gtk.Entry() self.searchEntry.connect("activate", self.online_search_clicked) self.searchbutton = Gtk.Button("Search Online") self.searchbutton.connect("clicked", self.online_search_clicked) - self.searchEntryLabel = Gtk.Label("Search for Cards:", xalign=0) + self.searchEntryLabel = Gtk.Label(xalign=0, yalign=0) + self.searchEntryLabel.set_markup("Search for Cards:") self.searchbox.add(self.searchEntryLabel) self.searchbox.add(self.searchEntry) self.searchbox.add(self.searchbutton) @@ -46,12 +49,12 @@ class SearchView(Gtk.Grid): image = Gtk.CellRendererPixbuf() title = Gtk.CellRendererText(xalign=0.5) - title.set_padding = 2 + title.set_padding(5, 5) info = Gtk.CellRendererText() info.set_property("wrap-mode", Pango.WrapMode.WORD) info.set_property("wrap-width", 100) - info.set_padding = 2 + info.set_padding(5, 5) index = Gtk.CellRendererText() self.indexcolumn = Gtk.TreeViewColumn(title=index, cell_renderer=index, text=0) @@ -73,18 +76,25 @@ class SearchView(Gtk.Grid): self.list.append_column(self.column4) # Detail View for selected Card - self.details = Gtk.Box() - self.details.add(details.DetailBar()) - + self.details = details.DetailBar() # Bring it all together self.attach(self.searchbox, 0, 0, 1, 1) self.attach(self.filterBox, 0, 1, 1, 1) - self.attach(self.searchresults, 1, 0, 1, 2) - self.attach(self.details, 2, 0, 1, 2) + self.attach(self.searchresults, 2, 0, 1, 2) + self.attach(self.details, 4, 0, 1, 2) + + # Vertical Separators + self.attach(Gtk.VSeparator(), 1, 0, 1, 2) + self.attach(Gtk.VSeparator(), 3, 0, 1, 2) + + self.selection = self.list.get_selection() self.selection.connect("changed", self.on_card_selected) + def on_appering(self): + self.details.rulings.set_visible(False) + def online_search_clicked(self, button): term = self.searchEntry.get_text() if not term == "": @@ -115,8 +125,8 @@ class SearchView(Gtk.Grid): for card in self.cards: if card.multiverse_id == card_id: selected_card = card - - print(selected_card.name + " selected \n") + if selected_card is not None: + self.details.set_card_detail(selected_card) diff --git a/mtg-collector/util.py b/mtg-collector/util.py index cadedbe..6e4674f 100644 --- a/mtg-collector/util.py +++ b/mtg-collector/util.py @@ -36,16 +36,14 @@ def reload_image_cache(): imagecache.append(img) -def add_test_image(sizex, sizey): +def load_dummy_image(sizex, sizey): return GdkPixbuf.Pixbuf.new_from_file_at_size(os.path.dirname(__file__) + - '/resources/images/demo.jpg', sizex, sizey) - - + '/resources/images/dummy.jpg', sizex, sizey) def load_card_image_online(card): url = card.image_url if url is None: print("No Image URL provided") - return add_test_image() + return load_dummy_image() filename = config.cachepath + card.multiverse_id.__str__() + ".PNG" print("Loading image from: " + url) response = request.urlretrieve(url, filename)