Add library view

This commit is contained in:
luxick
2017-04-14 16:18:20 +02:00
parent fcb3ad2592
commit f6f770a4da
8 changed files with 310 additions and 26 deletions

View File

@@ -6,15 +6,13 @@ from gi.repository import Gtk, GdkPixbuf, GObject
class CardList(Gtk.ScrolledWindow):
def __init__(self, tree, with_filter):
def __init__(self, with_filter):
Gtk.ScrolledWindow.__init__(self)
self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
self.set_hexpand(True)
self.set_vexpand(True)
self.filtered = with_filter
self.list = tree
self.lib = {}
# Columns are these:
@@ -42,6 +40,7 @@ class CardList(Gtk.ScrolledWindow):
self.list.set_rules_hint(True)
self.selection = self.list.get_selection()
self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
bold_renderer = Gtk.CellRendererText(xalign=0.5, yalign=0.5)
bold_renderer.set_property("weight", 800)

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkScrolledWindow" id="list_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<placeholder/>
</child>
</object>
</interface>

183
cardvault/gui/library.glade Normal file
View File

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkListStore" id="tagStore">
<columns>
<!-- column-name tag -->
<column type="gchararray"/>
<!-- column-name display -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkPaned" id="libraryView">
<property name="name">Library</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<signal name="show" handler="do_reload_library" swapped="no"/>
<child>
<object class="GtkBox" id="lib_left_pane">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="tagTree">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="vexpand">True</property>
<property name="model">tagStore</property>
<property name="reorderable">True</property>
<property name="search_column">1</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="col_tag">
<property name="visible">False</property>
<property name="title" translatable="yes">tag</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="col_tag_display">
<property name="title" translatable="yes">Tags</property>
<property name="clickable">True</property>
<property name="alignment">0.5</property>
<property name="sort_indicator">True</property>
<property name="sort_column_id">0</property>
<child>
<object class="GtkCellRendererText" id="cell_tag">
<property name="alignment">center</property>
</object>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="addTagBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">False</property>
<child>
<object class="GtkEntry" id="newTagEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="placeholder_text" translatable="yes">New Tag</property>
<signal name="changed" handler="do_tag_entry_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="newTagButton">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="do_new_tag_clicked" object="newTagEntry" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkBox" id="lib_right_pane">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkBox" id="libTools">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">False</property>
<child>
<object class="GtkSearchEntry" id="searchLibEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<property name="placeholder_text" translatable="yes">Search Library</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkOverlay" id="libraryContainer">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
</interface>

View File

@@ -35,6 +35,57 @@
</packing>
</child>
</object>
<object class="GtkGrid" id="libEmpty">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="column_homogeneous">True</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="valign">end</property>
<property name="pixel_size">100</property>
<property name="icon_name">edit-find-symbolic</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="valign">start</property>
<property name="label" translatable="yes">Use the Search View to add cards to your library</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="valign">center</property>
<property name="label" translatable="yes">No cards in library</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="2"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
</object>
<object class="GtkGrid" id="pageNotFound">
<property name="name">Not Found</property>
<property name="visible">True</property>

View File

@@ -1,8 +1,7 @@
import gi
import config
import util
import lib_funct
import search_funct
from mtgsdk import Card
from gi.repository import Gtk
gi.require_version('Gtk', '3.0')
@@ -30,6 +29,7 @@ class Handlers:
self.app.current_page = new_page
container.pack_start(self.app.current_page, True, True, 0)
container.show_all()
self.app.current_page.emit('show')
app_title = new_page.get_name() + " - " + config.application_title
self.app.ui.get_object("mainWindow").set_title(app_title)
@@ -45,11 +45,23 @@ class Handlers:
def do_add_remove_clicked(self, button):
pass
#----------------Library-----------------
def do_reload_library(self, view):
lib_funct.reload_library(self.app)
def do_tag_entry_changed(self, entry):
input_valid = entry.get_text() and entry.get_text() != ""
self.app.ui.get_object("newTagButton").set_sensitive(input_valid)
def do_new_tag_clicked(self, entry):
lib_funct.add_new_tag(entry.get_text(), self.app)
entry.set_text("")
# Handlers for TreeViews etc. wich have been not added by Glade
def on_search_card_selected(self, tree, row_no, column):
(model, path_list) = tree.get_selection().get_selected_rows()
for path in path_list:
tree_iter = model.get_iter(path)
card_id = model.get_value(tree_iter, 0)
@@ -57,4 +69,13 @@ class Handlers:
card = card_list.lib[card_id]
self.app.show_card_details(card)
def on_library_card_selected(self, tree, row_no, column):
(model, path_list) = tree.get_selection().get_selected_rows()
for path in path_list:
tree_iter = model.get_iter(path)
card_id = model.get_value(tree_iter, 0)
card_list = self.app.ui.get_object("libraryContainer").get_child()
card = card_list.lib[card_id]
self.app.show_card_details(card)

37
cardvault/lib_funct.py Normal file
View File

@@ -0,0 +1,37 @@
import cardlist
import util
import gi
from gi.repository import GObject
gi.require_version('Gtk', '3.0')
def init_library_view(app):
# Create Tree View for library
container = app.ui.get_object("libraryContainer")
card_list = cardlist.CardList(True)
card_list.set_name("libScroller")
card_list.list.connect("row-activated", app.handlers.on_library_card_selected)
container.add(card_list)
container.add_overlay(app.ui.get_object("libEmpty"))
container.show_all()
def reload_library(app):
reload_tag_list(app)
card_tree = app.ui.get_object("libraryContainer").get_child()
if util.library.items():
app.ui.get_object("libEmpty").set_visible(False)
card_tree.update(util.library)
def add_new_tag(name, app):
util.add_tag(name)
reload_tag_list(app)
def reload_tag_list(app):
tree = app.ui.get_object("tagTree")
store = tree.get_model()
store.clear()
store.append(["_All", "All" + " (" + str(len(util.library)) + ")"])
for tag, ids in util.tags.items():
store.append([tag, tag + " (" + str(len(ids)) + ")"])

View File

@@ -21,7 +21,11 @@ def init_search_view(app):
# Fill type box
_init_combo_box(app.ui.get_object("typeCombo"), util.card_types)
# Create Model for search results
_init_results_tree(app.ui.get_object("cardTree"), app)
_init_results_tree(app)
def reload_serach_view(app):
pass
def search_cards(term):
@@ -56,9 +60,9 @@ def search_cards(term):
return lib
def _init_results_tree(tree_view, app):
def _init_results_tree(app):
overlay = app.ui.get_object("searchResults")
card_list = cardlist.CardList(tree_view, False)
card_list = cardlist.CardList(False)
card_list.set_name("resultsScroller")
card_list.list.connect("row-activated", app.handlers.on_search_card_selected)
overlay.add(card_list)

View File

@@ -2,7 +2,7 @@ import config
import handlers
import util
import search_funct
import re
import lib_funct
import gi
from gi.repository import Gtk, Pango
gi.require_version('Gtk', '3.0')
@@ -10,11 +10,11 @@ gi.require_version('Gtk', '3.0')
class MainWindow:
def __init__(self):
self.ui = Gtk.Builder()
self.ui.add_from_file("gui/mainwindow.glade")
self.ui.add_from_file("gui/overlays.glade")
self.ui.add_from_file("gui/search.glade")
self.ui.add_from_file("gui/library.glade")
window = self.ui.get_object("mainWindow")
self.current_page = None
util.app = self
@@ -22,7 +22,7 @@ class MainWindow:
self.pages = {
"search": self.ui.get_object("searchView"),
"library": not_found,
"library": self.ui.get_object("libraryView"),
"decks": not_found
}
@@ -39,6 +39,8 @@ class MainWindow:
search_funct.init_search_view(self)
lib_funct.init_library_view(self)
window.connect('delete-event', Gtk.main_quit)
window.show_all()
self.push_status("Card Vault ready.")
@@ -85,7 +87,7 @@ class MainWindow:
# Legalities
grid = builder.get_object("legalitiesGrid")
rows = 1
for legality in card.legalities:
for legality in card.legalities if card.legalities else {}:
date_label = Gtk.Label()
date_label.set_halign(Gtk.Align.END)
text_label = Gtk.Label()