Rename and remove tags.
This commit is contained in:
@@ -173,6 +173,28 @@ class Application:
|
|||||||
dialog.run()
|
dialog.run()
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
|
def show_tag_rename_dialog(self, tag):
|
||||||
|
def rename(button, entry):
|
||||||
|
self.rename_tag(tag, entry.get_text())
|
||||||
|
window.destroy()
|
||||||
|
self.current_page.emit('show')
|
||||||
|
|
||||||
|
def eval_key_pressed(widget,event):
|
||||||
|
key, modifier = Gtk.accelerator_parse('Escape')
|
||||||
|
keyval = event.keyval
|
||||||
|
if keyval == key:
|
||||||
|
window.destroy()
|
||||||
|
|
||||||
|
builder = Gtk.Builder()
|
||||||
|
builder.add_from_file(util.get_ui_filename("dialogs.glade"))
|
||||||
|
window = builder.get_object("renameWindow")
|
||||||
|
entry = builder.get_object("renameEntry")
|
||||||
|
entry.set_text(tag)
|
||||||
|
builder.get_object("renameButton").connect('clicked', rename, entry)
|
||||||
|
entry.connect('activate', rename, entry)
|
||||||
|
window.show_all()
|
||||||
|
window.connect("key-press-event", eval_key_pressed)
|
||||||
|
|
||||||
def save_library(self):
|
def save_library(self):
|
||||||
# Save library file
|
# Save library file
|
||||||
util.save_file(util.get_root_filename("library"), self.library)
|
util.save_file(util.get_root_filename("library"), self.library)
|
||||||
@@ -223,14 +245,22 @@ class Application:
|
|||||||
|
|
||||||
def add_tag(self, tag):
|
def add_tag(self, tag):
|
||||||
self.tags[tag] = []
|
self.tags[tag] = []
|
||||||
|
util.log("Tag '" + tag + "' added", util.LogLevel.Info)
|
||||||
self.push_status("Added Tag \"" + tag + "\"")
|
self.push_status("Added Tag \"" + tag + "\"")
|
||||||
self.unsaved_changes = True
|
self.unsaved_changes = True
|
||||||
|
|
||||||
def remove_tag(self, tag):
|
def remove_tag(self, tag):
|
||||||
del self.tags[tag]
|
del self.tags[tag]
|
||||||
|
util.log("Tag '" + tag + "' removed", util.LogLevel.Info)
|
||||||
self.push_status("Removed Tag \"" + tag + "\"")
|
self.push_status("Removed Tag \"" + tag + "\"")
|
||||||
self.unsaved_changes = True
|
self.unsaved_changes = True
|
||||||
|
|
||||||
|
def rename_tag(self, old, new):
|
||||||
|
self.tags[new] = self.tags[old]
|
||||||
|
del self.tags[old]
|
||||||
|
util.log("Tag '" + old + "' renamed to '" + new + "'", util.LogLevel.Info)
|
||||||
|
self.unsaved_changes = True
|
||||||
|
|
||||||
def add_card_to_lib(self, card, tag=None):
|
def add_card_to_lib(self, card, tag=None):
|
||||||
if tag is not None:
|
if tag is not None:
|
||||||
self.tag_card(card, tag)
|
self.tag_card(card, tag)
|
||||||
|
|||||||
@@ -110,6 +110,8 @@ class CardList(Gtk.ScrolledWindow):
|
|||||||
self.list.append_column(col_mana)
|
self.list.append_column(col_mana)
|
||||||
self.list.append_column(col_cmc)
|
self.list.append_column(col_cmc)
|
||||||
|
|
||||||
|
self.store.set_sort_column_id(1, Gtk.SortType.ASCENDING)
|
||||||
|
|
||||||
def get_selected_cards(self):
|
def get_selected_cards(self):
|
||||||
(model, pathlist) = self.selection.get_selected_rows()
|
(model, pathlist) = self.selection.get_selected_rows()
|
||||||
output = {}
|
output = {}
|
||||||
@@ -122,46 +124,45 @@ class CardList(Gtk.ScrolledWindow):
|
|||||||
|
|
||||||
def update(self, library, colorize=False):
|
def update(self, library, colorize=False):
|
||||||
self.store.clear()
|
self.store.clear()
|
||||||
|
|
||||||
if library is None:
|
if library is None:
|
||||||
return
|
return
|
||||||
self.lib = library
|
self.lib = library
|
||||||
|
|
||||||
if self.filtered:
|
if self.filtered:
|
||||||
self.list.freeze_child_notify()
|
self.list.freeze_child_notify()
|
||||||
self.list.set_model(None)
|
self.list.set_model(None)
|
||||||
|
|
||||||
|
util.log("Updating tree view", util.LogLevel.Info)
|
||||||
|
|
||||||
start = time.time()
|
start = time.time()
|
||||||
for card_id, card in library.items():
|
for card_id, card in library.items():
|
||||||
|
|
||||||
if card.multiverse_id is not None:
|
if card.multiverse_id is not None:
|
||||||
|
|
||||||
if self.app.library.__contains__(card_id) and colorize:
|
if self.app.library.__contains__(card_id) and colorize:
|
||||||
color = util.card_view_colors["owned"]
|
color = util.card_view_colors["owned"]
|
||||||
else:
|
else:
|
||||||
color = util.card_view_colors["unowned"]
|
color = util.card_view_colors["unowned"]
|
||||||
|
|
||||||
if card.type == "Land":
|
if card.type == "Land":
|
||||||
mana_cost = None
|
mana_cost = None
|
||||||
else:
|
else:
|
||||||
mana_cost = self.app.get_mana_icons(card.mana_cost)
|
mana_cost = self.app.get_mana_icons(card.mana_cost)
|
||||||
|
item = [card.multiverse_id,
|
||||||
item =[
|
card.name,
|
||||||
card.multiverse_id,
|
" ".join(card.supertypes if card.supertypes else ""),
|
||||||
card.name,
|
" ".join(card.types),
|
||||||
" ".join(card.supertypes if card.supertypes else ""),
|
card.rarity,
|
||||||
" ".join(card.types),
|
card.power,
|
||||||
card.rarity,
|
card.toughness,
|
||||||
card.power,
|
", ".join(card.printings),
|
||||||
card.toughness,
|
mana_cost,
|
||||||
", ".join(card.printings),
|
card.cmc,
|
||||||
mana_cost,
|
card.set_name,
|
||||||
card.cmc,
|
color]
|
||||||
card.set_name,
|
|
||||||
color]
|
|
||||||
self.store.append(item)
|
self.store.append(item)
|
||||||
end = time.time()
|
end = time.time()
|
||||||
util.log("Time to build Table: " + str(round(end - start, 3)), util.LogLevel.Info)
|
|
||||||
|
util.log("Time to build Table: " + str(round(end - start, 3)) + "s", util.LogLevel.Info)
|
||||||
|
util.log("Total entries: " + str(len(self.lib)), util.LogLevel.Info)
|
||||||
|
|
||||||
if self.filtered:
|
if self.filtered:
|
||||||
self.list.set_model(self.filter_and_sort)
|
self.list.set_model(self.filter_and_sort)
|
||||||
self.list.thaw_child_notify()
|
self.list.thaw_child_notify()
|
||||||
|
|||||||
48
cardvault/gui/dialogs.glade
Normal file
48
cardvault/gui/dialogs.glade
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.20.0 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
|
<object class="GtkWindow" id="renameWindow">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">Rename</property>
|
||||||
|
<property name="resizable">False</property>
|
||||||
|
<property name="modal">True</property>
|
||||||
|
<property name="skip_taskbar_hint">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry" id="renameEntry">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="renameButton">
|
||||||
|
<property name="label" translatable="yes">Rename</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@@ -2,6 +2,28 @@
|
|||||||
<!-- Generated with glade 3.20.0 -->
|
<!-- Generated with glade 3.20.0 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.20"/>
|
<requires lib="gtk+" version="3.20"/>
|
||||||
|
<object class="GtkMenu" id="tagListPopup">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="tagRename">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Rename</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="do_tag_list_rename" object="tagTree" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="tagDelete">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Delete</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="do_tag_list_delete" object="tagTree" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
<object class="GtkListStore" id="tagStore">
|
<object class="GtkListStore" id="tagStore">
|
||||||
<columns>
|
<columns>
|
||||||
<!-- column-name tag -->
|
<!-- column-name tag -->
|
||||||
@@ -13,6 +35,7 @@
|
|||||||
<object class="GtkEntryCompletion" id="tagCompleter">
|
<object class="GtkEntryCompletion" id="tagCompleter">
|
||||||
<property name="model">tagStore</property>
|
<property name="model">tagStore</property>
|
||||||
<property name="text_column">0</property>
|
<property name="text_column">0</property>
|
||||||
|
<property name="inline_selection">True</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCellRendererText"/>
|
<object class="GtkCellRendererText"/>
|
||||||
<attributes>
|
<attributes>
|
||||||
@@ -45,7 +68,7 @@
|
|||||||
<property name="vexpand">True</property>
|
<property name="vexpand">True</property>
|
||||||
<property name="model">tagStore</property>
|
<property name="model">tagStore</property>
|
||||||
<property name="search_column">1</property>
|
<property name="search_column">1</property>
|
||||||
<property name="activate_on_single_click">True</property>
|
<signal name="button-press-event" handler="do_tag_tree_press_event" swapped="no"/>
|
||||||
<signal name="drag-data-received" handler="on_drag_data_received" swapped="no"/>
|
<signal name="drag-data-received" handler="on_drag_data_received" swapped="no"/>
|
||||||
<signal name="row-activated" handler="on_tag_selected" object="tagTreeSelection" swapped="no"/>
|
<signal name="row-activated" handler="on_tag_selected" object="tagTreeSelection" swapped="no"/>
|
||||||
<child internal-child="selection">
|
<child internal-child="selection">
|
||||||
|
|||||||
@@ -153,6 +153,30 @@ class Handlers:
|
|||||||
tag = model.get_value(tree_iter, 0)
|
tag = model.get_value(tree_iter, 0)
|
||||||
lib_funct.reload_library(self.app, tag)
|
lib_funct.reload_library(self.app, tag)
|
||||||
|
|
||||||
|
def do_tag_tree_press_event(self, treeview, event):
|
||||||
|
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("tagListPopup").popup(None, None, None, None, 0, event.time)
|
||||||
|
|
||||||
|
def do_tag_list_rename(self, tree):
|
||||||
|
(model, pathlist) = tree.get_selection().get_selected_rows()
|
||||||
|
for path in pathlist:
|
||||||
|
tree_iter = model.get_iter(path)
|
||||||
|
tag = model.get_value(tree_iter, 0)
|
||||||
|
|
||||||
|
self.app.show_tag_rename_dialog(tag)
|
||||||
|
|
||||||
|
def do_tag_list_delete(self, tree):
|
||||||
|
(model, pathlist) = tree.get_selection().get_selected_rows()
|
||||||
|
for path in pathlist:
|
||||||
|
tree_iter = model.get_iter(path)
|
||||||
|
tag = model.get_value(tree_iter, 0)
|
||||||
|
self.app.remove_tag(tag)
|
||||||
|
self.app.current_page.emit('show')
|
||||||
|
|
||||||
# Handlers for TreeViews etc. wich have been not added by Glade
|
# Handlers for TreeViews etc. wich have been not added by Glade
|
||||||
|
|
||||||
# ----------------Search-----------------
|
# ----------------Search-----------------
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from cardvault import cardlist
|
from cardvault import cardlist
|
||||||
import gi
|
import gi
|
||||||
|
from gi.repository import Gtk
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
|
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ def reload_tag_list(app, preserve=False):
|
|||||||
store.append([tag, tag + " (" + str(len(ids)) + ")"])
|
store.append([tag, tag + " (" + str(len(ids)) + ")"])
|
||||||
if preserve:
|
if preserve:
|
||||||
tree.set_cursor(path if path else 0)
|
tree.set_cursor(path if path else 0)
|
||||||
|
store.set_sort_column_id(1, Gtk.SortType.ASCENDING)
|
||||||
|
|
||||||
|
|
||||||
def tag_cards(card_list, tag, app):
|
def tag_cards(card_list, tag, app):
|
||||||
|
|||||||
Reference in New Issue
Block a user