diff --git a/cardvault/application.py b/cardvault/application.py index 05f91e4..a6db8cf 100644 --- a/cardvault/application.py +++ b/cardvault/application.py @@ -18,9 +18,6 @@ from typing import Type, Dict, List from cardvault import handlers from cardvault import util -from cardvault import wants_funct - - class Application: diff --git a/cardvault/cardlist.py b/cardvault/cardlist.py index 7787270..a41432c 100644 --- a/cardvault/cardlist.py +++ b/cardvault/cardlist.py @@ -1,3 +1,5 @@ +import copy + import gi from cardvault import util from cardvault import application @@ -14,7 +16,7 @@ gi.require_version('Gdk', '3.0') class CardList(Gtk.ScrolledWindow): def __init__(self, filtered, app: 'application.Application', row_colors: Dict[str, str]): Gtk.ScrolledWindow.__init__(self) - self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.set_hexpand(True) self.set_vexpand(True) @@ -23,100 +25,20 @@ class CardList(Gtk.ScrolledWindow): self.app = app self.row_colors = row_colors - # Columns are these: - # 0 Multiverse ID - # 1 Card Name - # 2 Card Supertypes (Legendary,..) - # 3 Card types (Creature, etc) - # 4 Rarity - # 5 Power - # 6 Toughness - # 7 Printings (Sets with this card in it) - # 8 Mana Cost(Form: {G}{2}) - # 9 CMC - # 10 Edition - # 11 Color indicating if the card is owned or wanted - self.store = Gtk.ListStore(int, str, str, str, str, str, str, str, GdkPixbuf.Pixbuf, int, str, str) - if self.filtered: - self.filter = self.store.filter_new() - self.filter_and_sort = Gtk.TreeModelSort(self.filter) - self.filter_and_sort.set_sort_func(4, self.compare_rarity, None) - self.list = Gtk.TreeView(self.filter_and_sort) - else: - self.store.set_sort_func(4, self.compare_rarity, None) - self.list = Gtk.TreeView(self.store) - self.add(self.list) + builder = Gtk.Builder() + builder.add_from_file(util.get_ui_filename("cardtree.glade")) - self.list.set_rules_hint(True) - self.selection = self.list.get_selection() - self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) + self.filter = builder.get_object("cardStoreFiltered") - bold_renderer = Gtk.CellRendererText(xalign=0.5, yalign=0.5) - bold_renderer.set_property("weight", 800) + self.store = builder.get_object("cardStore") - text_renderer = Gtk.CellRendererText(xalign=0.5, yalign=0.5) - text_renderer.set_property("weight", 500) - image_renderer = Gtk.CellRendererPixbuf() + self.tree = builder.get_object("cardTree") - col_id = Gtk.TreeViewColumn(title="Multiverse ID", cell_renderer=text_renderer, text=0, foreground=11) - col_id.set_visible(False) + self.store.set_sort_func(4, self.compare_rarity, None) - col_title = Gtk.TreeViewColumn(title="Name", cell_renderer=bold_renderer, text=1, foreground=11) - col_title.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) - col_title.set_expand(True) - col_title.set_sort_column_id(1) + self.add(self.tree) - col_supertypes = Gtk.TreeViewColumn(title="Supertypes", cell_renderer=text_renderer, text=2, foreground=11) - col_supertypes.set_sort_column_id(2) - col_supertypes.set_visible(False) - - col_types = Gtk.TreeViewColumn(title="Types", cell_renderer=text_renderer, text=3, foreground=11) - col_types.set_sort_column_id(3) - - col_rarity = Gtk.TreeViewColumn(title="Rarity", cell_renderer=text_renderer, text=4, foreground=11) - col_rarity.set_sort_column_id(4) - - col_power = Gtk.TreeViewColumn(title="Power", cell_renderer=text_renderer, text=5, foreground=11) - col_power.set_sizing(Gtk.TreeViewColumnSizing.FIXED) - col_power.set_fixed_width(50) - col_power.set_sort_column_id(5) - col_power.set_visible(False) - - col_thoughness = Gtk.TreeViewColumn(title="Toughness", cell_renderer=text_renderer, text=6, foreground=11) - col_thoughness.set_sizing(Gtk.TreeViewColumnSizing.FIXED) - col_thoughness.set_fixed_width(50) - col_thoughness.set_sort_column_id(6) - col_thoughness.set_visible(False) - - col_printings = Gtk.TreeViewColumn(title="Printings", cell_renderer=text_renderer, text=7, foreground=11) - col_printings.set_sort_column_id(7) - col_printings.set_visible(False) - - col_mana = Gtk.TreeViewColumn(title="Mana Cost", cell_renderer=image_renderer, pixbuf=8) - col_mana.set_expand(False) - col_mana.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) - col_mana.set_sort_column_id(9) - - col_cmc = Gtk.TreeViewColumn(title="CMC", cell_renderer=text_renderer, text=9, foreground=11) - col_cmc.set_visible(False) - - col_set_name = Gtk.TreeViewColumn(title="Edition", cell_renderer=text_renderer, text=10, foreground=11) - col_set_name.set_expand(False) - col_set_name.set_sort_column_id(10) - - self.list.append_column(col_id) - self.list.append_column(col_title) - self.list.append_column(col_supertypes) - self.list.append_column(col_types) - self.list.append_column(col_rarity) - self.list.append_column(col_set_name) - self.list.append_column(col_power) - self.list.append_column(col_thoughness) - self.list.append_column(col_printings) - self.list.append_column(col_mana) - self.list.append_column(col_cmc) - - self.store.set_sort_column_id(1, Gtk.SortType.ASCENDING) + self.selection = self.tree.get_selection() def get_selected_cards(self) -> dict: (model, pathlist) = self.selection.get_selected_rows() @@ -135,8 +57,7 @@ class CardList(Gtk.ScrolledWindow): self.lib = library # Disable update if tree is filtered (performance) if self.filtered: - self.list.freeze_child_notify() - self.list.set_model(None) + self.tree.freeze_child_notify() util.log("Updating tree view", util.LogLevel.Info) start = time.time() @@ -165,8 +86,7 @@ class CardList(Gtk.ScrolledWindow): # Reactivate update for filtered trees if self.filtered: - self.list.set_model(self.filter_and_sort) - self.list.thaw_child_notify() + self.tree.thaw_child_notify() @staticmethod def compare_rarity(model, row1, row2, user_data): diff --git a/cardvault/gui/cardtree.glade b/cardvault/gui/cardtree.glade index a14b5b4..f5aae41 100644 --- a/cardvault/gui/cardtree.glade +++ b/cardvault/gui/cardtree.glade @@ -30,23 +30,33 @@ + + cardStore + + + cardStoreFiltered + True True - cardStore + cardStoreFilteredSorted 2 - both + horizontal - + + multiple + True + autosize Card Name True 1 + 2 800 @@ -56,25 +66,16 @@ - - - Supertypes - 2 - - - - 11 - 2 - - - - + True + autosize Types 3 - + + 2 + 11 3 @@ -84,10 +85,14 @@ + True + autosize Rarity 4 - + + 2 + 11 4 @@ -97,10 +102,14 @@ + True + autosize Edition 10 - + + 2 + 11 10 @@ -110,6 +119,8 @@ + True + autosize Mana Cost 9 diff --git a/cardvault/gui/mainwindow.glade b/cardvault/gui/mainwindow.glade index f9be887..963ad0b 100644 --- a/cardvault/gui/mainwindow.glade +++ b/cardvault/gui/mainwindow.glade @@ -6,8 +6,8 @@ Card Vault False Card Vault - 800 - 600 + 900 + 700 application-x-executable diff --git a/cardvault/library.py b/cardvault/library.py index ad2cb98..5d421ff 100644 --- a/cardvault/library.py +++ b/cardvault/library.py @@ -108,7 +108,7 @@ class LibraryHandlers: for card in cards.values(): self.app.untag_card(card, tag) self.reload_library(tag) - self.reload_tag_list(preserve=True) + self.reload_tag_list(none_selected=True) def do_popup_remove_card(self, item): # Get selected cards @@ -118,7 +118,7 @@ class LibraryHandlers: for card in cards.values(): self.app.remove_card_from_lib(card) self.reload_library(self.app.current_lib_tag) - self.reload_tag_list(preserve=True) + self.reload_tag_list(none_selected=True) # ---------------------------------Library Tree---------------------------------------------- @@ -155,9 +155,9 @@ class LibraryHandlers: card_list = cardlist.CardList(True, self.app, util.GENERIC_TREE_COLORS) card_list.set_name("libScroller") # Show details - card_list.list.connect("row-activated", self.on_library_card_selected) + card_list.tree.connect("row-activated", self.on_library_card_selected) # Show Context menu - card_list.list.connect("button-press-event", self.on_library_tree_press_event) + card_list.tree.connect("button-press-event", self.on_library_tree_press_event) card_list.filter.set_visible_func(self.app.filter_lib_func) container.add(card_list) container.add_overlay(self.app.ui.get_object("noResults")) @@ -172,7 +172,7 @@ class LibraryHandlers: lib = self.app.library else: lib = self.app.get_tagged_cards(tag) - self.reload_tag_list(True) + self.reload_tag_list(tag == "All" or tag == "Untagged") tag_combo = self.app.ui.get_object("tagCardCombo") tag_combo.set_model(self.app.ui.get_object("tagStore")) @@ -188,7 +188,7 @@ class LibraryHandlers: self.app.add_tag(name) self.reload_tag_list(True) - def reload_tag_list(self, preserve=False): + def reload_tag_list(self, none_selected=False): """Reload left pane tag list""" tree = self.app.ui.get_object("tagTree") (path, column) = tree.get_cursor() @@ -196,7 +196,7 @@ class LibraryHandlers: store.clear() for tag, ids in self.app.tags.items(): store.append([tag, tag + " (" + str(len(ids)) + ")"]) - if preserve: + if none_selected: tree.set_cursor(path if path else 0) store.set_sort_column_id(1, Gtk.SortType.ASCENDING) diff --git a/cardvault/search.py b/cardvault/search.py index 2e44f69..6d3ca89 100644 --- a/cardvault/search.py +++ b/cardvault/search.py @@ -285,14 +285,14 @@ class SearchHandlers: overlay = self.app.ui.get_object("searchResults") card_list = cardlist.CardList(False, self.app, util.SEARCH_TREE_COLORS) card_list.set_name("resultsScroller") - card_list.list.connect("row-activated", self.on_search_card_selected) + card_list.tree.connect("row-activated", self.on_search_card_selected) card_list.selection.connect("changed", self.on_search_selection_changed) overlay.add(card_list) overlay.add_overlay(self.app.ui.get_object("searchOverlay")) overlay.show_all() # Connect signal for context menu - card_list.list.connect("button-press-event", self.on_search_tree_press_event) + card_list.tree.connect("button-press-event", self.on_search_tree_press_event) @staticmethod def _init_combo_box(combo, card_list: list): diff --git a/cardvault/wants.py b/cardvault/wants.py index 316f351..30c794e 100644 --- a/cardvault/wants.py +++ b/cardvault/wants.py @@ -138,8 +138,8 @@ class WantsHandlers: card_list = cardlist.CardList(True, self.app, util.GENERIC_TREE_COLORS) card_list.set_name("wantsScroller") # Show details - card_list.list.connect("row-activated", self.on_wants_card_selected) - card_list.list.connect("button-press-event", self.on_wants_cards_press_event) + card_list.tree.connect("row-activated", self.on_wants_card_selected) + card_list.tree.connect("button-press-event", self.on_wants_cards_press_event) # Add card list to container container.add(card_list) container.add_overlay(self.app.ui.get_object("wantsOverlay"))