Change window layout from notebook to different views
This commit is contained in:
@@ -106,9 +106,10 @@ class CardList(Gtk.ScrolledWindow):
|
|||||||
self.list.append_column(col_cmc)
|
self.list.append_column(col_cmc)
|
||||||
|
|
||||||
def update(self, library, progressbar=None):
|
def update(self, library, progressbar=None):
|
||||||
self.store.clear()
|
|
||||||
progress_step = 1 / len(library)
|
progress_step = 1 / len(library)
|
||||||
progress = 0.0
|
progress = 0.0
|
||||||
|
|
||||||
|
self.store.clear()
|
||||||
if progressbar is not None:
|
if progressbar is not None:
|
||||||
progressbar.set_fraction(progress)
|
progressbar.set_fraction(progress)
|
||||||
for multiverse_id, card in library.items():
|
for multiverse_id, card in library.items():
|
||||||
@@ -127,7 +128,6 @@ class CardList(Gtk.ScrolledWindow):
|
|||||||
util.create_mana_icons(card.mana_cost),
|
util.create_mana_icons(card.mana_cost),
|
||||||
card.cmc,
|
card.cmc,
|
||||||
card.set_name])
|
card.set_name])
|
||||||
|
|
||||||
progress += progress_step
|
progress += progress_step
|
||||||
if progressbar is not None:
|
if progressbar is not None:
|
||||||
progressbar.set_fraction(progress)
|
progressbar.set_fraction(progress)
|
||||||
|
|||||||
@@ -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
|
# When True Search view will list a card multiple times for each set they appear in
|
||||||
show_from_all_sets = True
|
show_from_all_sets = True
|
||||||
|
|
||||||
|
start_view="search"
|
||||||
|
|||||||
@@ -29,20 +29,36 @@ class MainWindow(Gtk.Window):
|
|||||||
util.load_sets()
|
util.load_sets()
|
||||||
util.load_library()
|
util.load_library()
|
||||||
|
|
||||||
self.notebook = Gtk.Notebook()
|
|
||||||
|
|
||||||
# region Menu Bar
|
# region Menu Bar
|
||||||
|
|
||||||
mb_main = Gtk.Menu()
|
mb_main = Gtk.Menu()
|
||||||
|
mb_view = Gtk.Menu()
|
||||||
mb_search = Gtk.Menu()
|
mb_search = Gtk.Menu()
|
||||||
mb_lib = Gtk.Menu()
|
mb_lib = Gtk.Menu()
|
||||||
|
|
||||||
self.menu_import = Gtk.MenuItem("Import Library")
|
root_main = Gtk.MenuItem("Main")
|
||||||
self.menu_import.connect("activate", self.mb_import_lib)
|
root_main.set_submenu(mb_main)
|
||||||
self.menu_export = Gtk.MenuItem("Export Library")
|
|
||||||
self.menu_export.connect("activate", self.mb_export_lib)
|
root_view = Gtk.MenuItem("View")
|
||||||
self.menu_quit = Gtk.ImageMenuItem('Quit', Gtk.Image.new_from_icon_name(Gtk.STOCK_QUIT, 0))
|
root_view.set_submenu(mb_view)
|
||||||
self.menu_quit.connect("activate", Gtk.main_quit)
|
|
||||||
|
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 = Gtk.MenuItem("Add card")
|
||||||
self.search_add.connect("activate", self.mb_search_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 = Gtk.ImageMenuItem("Save", Gtk.Image.new_from_icon_name(Gtk.STOCK_SAVE, 0))
|
||||||
self.lib_save.connect("activate", self.mb_save_lib)
|
self.lib_save.connect("activate", self.mb_save_lib)
|
||||||
|
|
||||||
mb_main.append(self.menu_import)
|
mb_main.append(self.main_import)
|
||||||
mb_main.append(self.menu_export)
|
mb_main.append(self.main_export)
|
||||||
mb_main.append(Gtk.SeparatorMenuItem())
|
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_add)
|
||||||
mb_search.append(self.search_show_all)
|
mb_search.append(self.search_show_all)
|
||||||
|
|
||||||
mb_lib.append(self.lib_save)
|
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 = Gtk.MenuBar()
|
||||||
mb.append(root_menu_main)
|
mb.append(root_main)
|
||||||
mb.append(root_menu_search)
|
mb.append(root_view)
|
||||||
mb.append(root_menu_lib)
|
mb.append(root_search)
|
||||||
|
mb.append(root_lib)
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
@@ -85,7 +96,11 @@ class MainWindow(Gtk.Window):
|
|||||||
accelgrp = Gtk.AccelGroup()
|
accelgrp = Gtk.AccelGroup()
|
||||||
|
|
||||||
key, mod = Gtk.accelerator_parse("<Control>Q")
|
key, mod = Gtk.accelerator_parse("<Control>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("<Control>1")
|
||||||
|
self.view_search.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
|
key, mod = Gtk.accelerator_parse("<Control>2")
|
||||||
|
self.view_library.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
key, mod = Gtk.accelerator_parse("<Control>S")
|
key, mod = Gtk.accelerator_parse("<Control>S")
|
||||||
self.lib_save.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
self.lib_save.add_accelerator("activate", accelgrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
key, mod = Gtk.accelerator_parse("<Control>A")
|
key, mod = Gtk.accelerator_parse("<Control>A")
|
||||||
@@ -95,42 +110,70 @@ class MainWindow(Gtk.Window):
|
|||||||
|
|
||||||
# endregion
|
# 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 = library.LibraryView()
|
||||||
# self.library.add(library.LibraryView())
|
|
||||||
|
|
||||||
self.search = search.SearchView()
|
self.search = search.SearchView()
|
||||||
|
|
||||||
self.decks = Gtk.Box()
|
self.view_dict = {
|
||||||
self.decks.add(Gtk.Label("View and organize your Decklists!"))
|
"library": self.library,
|
||||||
|
"search": self.search
|
||||||
|
}
|
||||||
|
|
||||||
self.notebook.append_page(self.search, Gtk.Label("Search"))
|
self.view_buttons = {
|
||||||
self.notebook.append_page(self.library, Gtk.Label("Library"))
|
"library": self.view_library,
|
||||||
self.notebook.append_page(self.decks, Gtk.Label("Decks"))
|
"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()
|
util.export_library()
|
||||||
|
|
||||||
def mb_import_lib(self, menu_item):
|
@staticmethod
|
||||||
|
def mb_import_lib(menu_item):
|
||||||
util.import_library()
|
util.import_library()
|
||||||
self.library.fill_lib_list()
|
|
||||||
|
|
||||||
def mb_search_add_card(self, menu_item):
|
def mb_search_add_card(self, menu_item):
|
||||||
self.search.on_add_delete(self.search.add_delete_button)
|
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()
|
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()
|
util.save_library()
|
||||||
|
|
||||||
def do_delete_event(self, event):
|
@staticmethod
|
||||||
|
def do_delete_event(event):
|
||||||
if util.unsaved_changes:
|
if util.unsaved_changes:
|
||||||
response = util.show_question_dialog("Unsaved Changes", "You have unsaved changes in your library. "
|
response = util.show_question_dialog("Unsaved Changes", "You have unsaved changes in your library. "
|
||||||
"Save before exiting?")
|
"Save before exiting?")
|
||||||
|
|||||||
@@ -82,14 +82,14 @@ class LibraryView(Gtk.Grid):
|
|||||||
|
|
||||||
self.refresh_library(self.refresh_button)
|
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.set_text("")
|
||||||
self.search_entry.activate()
|
self.search_entry.activate()
|
||||||
|
|
||||||
self.fill_lib_list()
|
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):
|
def lib_filter_func(self, model, iter, data):
|
||||||
if self.search_entry.get_text() is None or self.search_entry.get_text() == "":
|
if self.search_entry.get_text() is None or self.search_entry.get_text() == "":
|
||||||
|
|||||||
@@ -241,6 +241,9 @@ class SearchView(Gtk.Grid):
|
|||||||
|
|
||||||
# region Public Functions
|
# region Public Functions
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def load_cards(self):
|
def load_cards(self):
|
||||||
# Get search term
|
# Get search term
|
||||||
term = self.searchEntry.get_text()
|
term = self.searchEntry.get_text()
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ def load_card_image(card, sizex, sizey):
|
|||||||
|
|
||||||
def create_mana_icons(mana_string):
|
def create_mana_icons(mana_string):
|
||||||
# Convert the string to a List
|
# Convert the string to a List
|
||||||
list = re.findall("\{(.*?)\}", str(mana_string))
|
list = re.findall("{(.*?)}", str(mana_string))
|
||||||
if len(list) == 0:
|
if len(list) == 0:
|
||||||
return
|
return
|
||||||
# Compute horizontal size for the final image
|
# Compute horizontal size for the final image
|
||||||
|
|||||||
Reference in New Issue
Block a user