From e9bd63d54d29419476d1fb085f5d9d719ccafb2d Mon Sep 17 00:00:00 2001 From: luxick Date: Thu, 6 Apr 2017 21:34:28 +0200 Subject: [PATCH] Change window layout from notebook to different views --- mtg-collector/cardlist.py | 4 +- mtg-collector/config.py | 2 + mtg-collector/gui.py | 127 +++++++++++++++++++++++++------------- mtg-collector/library.py | 8 +-- mtg-collector/search.py | 3 + mtg-collector/util.py | 2 +- 6 files changed, 97 insertions(+), 49 deletions(-) diff --git a/mtg-collector/cardlist.py b/mtg-collector/cardlist.py index 541a26b..de1719e 100644 --- a/mtg-collector/cardlist.py +++ b/mtg-collector/cardlist.py @@ -106,9 +106,10 @@ class CardList(Gtk.ScrolledWindow): self.list.append_column(col_cmc) def update(self, library, progressbar=None): - self.store.clear() progress_step = 1 / len(library) progress = 0.0 + + self.store.clear() if progressbar is not None: progressbar.set_fraction(progress) for multiverse_id, card in library.items(): @@ -127,7 +128,6 @@ class CardList(Gtk.ScrolledWindow): util.create_mana_icons(card.mana_cost), card.cmc, card.set_name]) - progress += progress_step if progressbar is not None: progressbar.set_fraction(progress) diff --git a/mtg-collector/config.py b/mtg-collector/config.py index 8516753..2bc5d03 100644 --- a/mtg-collector/config.py +++ b/mtg-collector/config.py @@ -17,3 +17,5 @@ red_color = Gdk.color_parse('#ff6d6d') # When True Search view will list a card multiple times for each set they appear in show_from_all_sets = True + +start_view="search" diff --git a/mtg-collector/gui.py b/mtg-collector/gui.py index f54b80f..daa3f00 100644 --- a/mtg-collector/gui.py +++ b/mtg-collector/gui.py @@ -29,20 +29,36 @@ class MainWindow(Gtk.Window): util.load_sets() util.load_library() - self.notebook = Gtk.Notebook() - # region Menu Bar mb_main = Gtk.Menu() + mb_view = Gtk.Menu() mb_search = Gtk.Menu() mb_lib = Gtk.Menu() - self.menu_import = Gtk.MenuItem("Import Library") - self.menu_import.connect("activate", self.mb_import_lib) - self.menu_export = Gtk.MenuItem("Export Library") - self.menu_export.connect("activate", self.mb_export_lib) - self.menu_quit = Gtk.ImageMenuItem('Quit', Gtk.Image.new_from_icon_name(Gtk.STOCK_QUIT, 0)) - self.menu_quit.connect("activate", Gtk.main_quit) + root_main = Gtk.MenuItem("Main") + root_main.set_submenu(mb_main) + + root_view = Gtk.MenuItem("View") + root_view.set_submenu(mb_view) + + root_search = Gtk.MenuItem("Search") + root_search.set_submenu(mb_search) + + root_lib = Gtk.MenuItem("Library") + root_lib.set_submenu(mb_lib) + + self.main_import = Gtk.MenuItem("Import Library") + self.main_import.connect("activate", self.mb_import_lib) + self.main_export = Gtk.MenuItem("Export Library") + self.main_export.connect("activate", self.mb_export_lib) + self.main_quit = Gtk.ImageMenuItem('Quit', Gtk.Image.new_from_icon_name(Gtk.STOCK_QUIT, 0)) + self.main_quit.connect("activate", Gtk.main_quit) + + self.view_search = Gtk.MenuItem(name="search", label="Search") + self.view_search.connect("activate", self.mb_view_switch) + self.view_library = Gtk.MenuItem(name="library", label="Library") + self.view_library.connect("activate", self.mb_view_switch) self.search_add = Gtk.MenuItem("Add card") self.search_add.connect("activate", self.mb_search_add_card) @@ -54,29 +70,24 @@ class MainWindow(Gtk.Window): self.lib_save = Gtk.ImageMenuItem("Save", Gtk.Image.new_from_icon_name(Gtk.STOCK_SAVE, 0)) self.lib_save.connect("activate", self.mb_save_lib) - mb_main.append(self.menu_import) - mb_main.append(self.menu_export) + mb_main.append(self.main_import) + mb_main.append(self.main_export) mb_main.append(Gtk.SeparatorMenuItem()) - mb_main.append(self.menu_quit) + mb_main.append(self.main_quit) + + mb_view.append(self.view_search) + mb_view.append(self.view_library) mb_search.append(self.search_add) mb_search.append(self.search_show_all) mb_lib.append(self.lib_save) - root_menu_main = Gtk.MenuItem("Main") - root_menu_main.set_submenu(mb_main) - - root_menu_search = Gtk.MenuItem("Search") - root_menu_search.set_submenu(mb_search) - - root_menu_lib = Gtk.MenuItem("Library") - root_menu_lib.set_submenu(mb_lib) - mb = Gtk.MenuBar() - mb.append(root_menu_main) - mb.append(root_menu_search) - mb.append(root_menu_lib) + mb.append(root_main) + mb.append(root_view) + mb.append(root_search) + mb.append(root_lib) # endregion @@ -85,7 +96,11 @@ class MainWindow(Gtk.Window): accelgrp = Gtk.AccelGroup() key, mod = Gtk.accelerator_parse("Q") - self.menu_quit.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE) + self.main_quit.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE) + key, mod = Gtk.accelerator_parse("1") + self.view_search.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE) + key, mod = Gtk.accelerator_parse("2") + self.view_library.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE) key, mod = Gtk.accelerator_parse("S") self.lib_save.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE) key, mod = Gtk.accelerator_parse("A") @@ -95,42 +110,70 @@ class MainWindow(Gtk.Window): # endregion - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - vbox.pack_start(mb, False, False, 0) - vbox.pack_start(self.notebook, True, True, 0) - vbox.pack_start(self.status_bar, False, False, 0) - self.library = library.LibraryView() - # self.library.add(library.LibraryView()) self.search = search.SearchView() - self.decks = Gtk.Box() - self.decks.add(Gtk.Label("View and organize your Decklists!")) + self.view_dict = { + "library": self.library, + "search": self.search + } - self.notebook.append_page(self.search, Gtk.Label("Search")) - self.notebook.append_page(self.library, Gtk.Label("Library")) - self.notebook.append_page(self.decks, Gtk.Label("Decks")) + self.view_buttons = { + "library": self.view_library, + "search": self.view_search + } - self.add(vbox) + self.view = self.view_dict[config.start_view] + self.view_buttons[config.start_view].set_sensitive(False) - def mb_export_lib(self, menu_item): + self.view_container = Gtk.Box() + self.view_container.set_border_width(2) + self.view_container.add(self.view) + + self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.vbox.pack_start(mb, False, False, 0) + self.vbox.pack_start(Gtk.HSeparator(), False, False, 0) + self.vbox.pack_start(self.view_container, True, True, 0) + self.vbox.pack_end(self.status_bar, False, False, 0) + + self.add(self.vbox) + + def switch_view(self, view): + self.view_container.remove(self.view) + self.view = view + self.view_container.add(view) + self.view_container.show_all() + + def mb_view_switch(self, menu_item): + new_view = self.view_dict[menu_item.get_name()] + self.switch_view(new_view) + for item in self.view_buttons.values(): + item.set_sensitive(True) + menu_item.set_sensitive(False) + self.view.reload() + + @staticmethod + def mb_export_lib(menu_item): util.export_library() - def mb_import_lib(self, menu_item): + @staticmethod + def mb_import_lib(menu_item): util.import_library() - self.library.fill_lib_list() def mb_search_add_card(self, menu_item): self.search.on_add_delete(self.search.add_delete_button) - def mb_search_show_all(self, menu_item): + @staticmethod + def mb_search_show_all(menu_item): config.show_from_all_sets = menu_item.get_active() - def mb_save_lib(self, menu_item): + @staticmethod + def mb_save_lib(menu_item): util.save_library() - def do_delete_event(self, event): + @staticmethod + def do_delete_event(event): if util.unsaved_changes: response = util.show_question_dialog("Unsaved Changes", "You have unsaved changes in your library. " "Save before exiting?") diff --git a/mtg-collector/library.py b/mtg-collector/library.py index 7d143b4..77b4f91 100644 --- a/mtg-collector/library.py +++ b/mtg-collector/library.py @@ -82,14 +82,14 @@ class LibraryView(Gtk.Grid): self.refresh_library(self.refresh_button) - def refresh_library(self, button): + def reload(self): + self.refresh_library() + + def refresh_library(self, button=None): self.search_entry.set_text("") self.search_entry.activate() self.fill_lib_list() - # load_thread = threading.Thread(target=self.fill_lib_list) - # load_thread.setDaemon(True) - # load_thread.start() def lib_filter_func(self, model, iter, data): if self.search_entry.get_text() is None or self.search_entry.get_text() == "": diff --git a/mtg-collector/search.py b/mtg-collector/search.py index 66d1cd3..7e7f01c 100644 --- a/mtg-collector/search.py +++ b/mtg-collector/search.py @@ -241,6 +241,9 @@ class SearchView(Gtk.Grid): # region Public Functions + def reload(self): + pass + def load_cards(self): # Get search term term = self.searchEntry.get_text() diff --git a/mtg-collector/util.py b/mtg-collector/util.py index 68f293e..fe2a9fd 100644 --- a/mtg-collector/util.py +++ b/mtg-collector/util.py @@ -223,7 +223,7 @@ def load_card_image(card, sizex, sizey): def create_mana_icons(mana_string): # Convert the string to a List - list = re.findall("\{(.*?)\}", str(mana_string)) + list = re.findall("{(.*?)}", str(mana_string)) if len(list) == 0: return # Compute horizontal size for the final image