From 010e110c2c92589dbb1c4f0069db2851418ff4ff Mon Sep 17 00:00:00 2001 From: luxick Date: Wed, 28 Jun 2017 13:59:36 +0200 Subject: [PATCH] Functions for Wants list context menu. --- cardvault/application.py | 11 +++++++++ cardvault/handlers.py | 48 ++++++++++++++++++++++++++++++++-------- cardvault/util.py | 5 +++-- cardvault/wants_funct.py | 1 + 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/cardvault/application.py b/cardvault/application.py index e1e3290..7fd80fd 100644 --- a/cardvault/application.py +++ b/cardvault/application.py @@ -294,6 +294,12 @@ class Application: out = {card.multiverse_id: card for card in self.wants[list_name]} return out + def delete_wants_list(self, name: str): + del self.wants[name] + util.log("Deleted Wants List '{}'".format(name), util.LogLevel.Info) + self.push_status("Deleted Wants List '{}'".format(name)) + self.unsaved_changes = True + def rename_want_list(self, old, new): self.wants[new] = self.wants[old] del self.wants[old] @@ -328,6 +334,11 @@ class Application: self.push_status(card.name + " removed from library") self.unsaved_changes = True + def remove_card_from_want_list(self, card: mtgsdk.Card, list: str): + l = self.wants[list] + l.remove(card) + util.log("Removed '{}' from wants list '{}'".format(card.name, list), util.LogLevel.Info) + def get_card_image(self, card, sizex, sizey): # Try using file from local cache, or load online try: diff --git a/cardvault/handlers.py b/cardvault/handlers.py index a257080..4f0b1eb 100644 --- a/cardvault/handlers.py +++ b/cardvault/handlers.py @@ -272,8 +272,6 @@ class Handlers: if event.button == 3: # right click path = treeview.get_path_at_pos(int(event.x), int(event.y)) if path: - tree_iter = treeview.get_model().get_iter(path[0]) - tag = treeview.get_model().get_value(tree_iter, 0) self.app.ui.get_object("wants_wantsListPopup").popup(None, None, None, None, 0, event.time) return True @@ -287,17 +285,49 @@ class Handlers: self.app.rename_want_list(tag, new_name) self.app.current_page.emit('show') - def do_delete_wants_list(self, menu_item): - # TODO - pass + def do_delete_wants_list(self, tree): + (model, pathlist) = tree.get_selection().get_selected_rows() + for path in pathlist: + tree_iter = model.get_iter(path) + name = model.get_value(tree_iter, 0) + + self.app.delete_wants_list(name) + self.app.current_page.emit('show') def on_want_cards_add_activated(self, menu_item): - # TODO - pass + # Get selected cards + tree = self.app.ui.get_object("wantsListContainer").get_child() + selected = tree.get_selected_cards() + + # Get selected list + list_tree = self.app.ui.get_object("wantsListsTree") + (model, pathlist) = list_tree.get_selection().get_selected_rows() + for path in pathlist: + tree_iter = model.get_iter(path) + list_name = model.get_value(tree_iter, 0) + + for card in selected.values(): + self.app.add_card_to_lib(card) + self.app.remove_card_from_want_list(card, list_name) + + wants_funct.reload_wants_view(self.app, list_name) def on_want_cards_remove_activated(self, menu_item): - # TODO - pass + # Get selected cards + tree = self.app.ui.get_object("wantsListContainer").get_child() + selected = tree.get_selected_cards() + + # Get selected list + list_tree = self.app.ui.get_object("wantsListsTree") + (model, pathlist) = list_tree.get_selection().get_selected_rows() + for path in pathlist: + tree_iter = model.get_iter(path) + list_name = model.get_value(tree_iter, 0) + + for card in selected.values(): + self.app.remove_card_from_want_list(card, list_name) + + wants_funct.reload_wants_view(self.app, list_name) # Handlers for TreeViews etc. which have been not added by Glade diff --git a/cardvault/util.py b/cardvault/util.py index 6d176b6..6b2aaec 100644 --- a/cardvault/util.py +++ b/cardvault/util.py @@ -7,12 +7,11 @@ from urllib import request import gi gi.require_version('Gtk', '3.0') -from gi.repository import GdkPixbuf +from gi.repository import GdkPixbuf, GLib import six.moves.cPickle as pickle from PIL import Image as PImage from mtgsdk import Set -from mtgsdk import Card from mtgsdk import MtgException # Title of the Program Window @@ -130,6 +129,8 @@ def reload_image_cache(path: str) -> dict: cache[imagename] = pixbuf except OSError as err: log("Error loading image: " + str(err), LogLevel.Error) + except GLib.GError as err: + log("Error loading image: " + str(err), LogLevel.Error) return cache diff --git a/cardvault/wants_funct.py b/cardvault/wants_funct.py index 7abd1d5..efefa0a 100644 --- a/cardvault/wants_funct.py +++ b/cardvault/wants_funct.py @@ -38,6 +38,7 @@ def reload_wants_view(app: 'application.Application', selected_list: str = None) label = app.ui.get_object("wantsTileLabel") # type: Gtk.Label label.set_markup("" + str(selected_list) + "") + def reload_wants_list(app: 'application.Application', preserve=False): tree = app.ui.get_object("wantsListsTree") (path, column) = tree.get_cursor()