Remove recreate tree method.
Removing and recreating tree isn't very efficient, so for operations like adding new directory or removing items from the store, only affected rows are changed (added or removed from the treestore).
This commit is contained in:
34
gtkpass.py
34
gtkpass.py
@@ -163,12 +163,6 @@ class GTKPass(Gtk.Window):
|
|||||||
child.show() if set_visible else child.hide()
|
child.show() if set_visible else child.hide()
|
||||||
self.textview.show() if set_visible else self.textview.hide()
|
self.textview.show() if set_visible else self.textview.hide()
|
||||||
|
|
||||||
def recreate_tree_store(self):
|
|
||||||
self.passs.gather_pass_tree()
|
|
||||||
self.tree_store.clear()
|
|
||||||
self.add_nodes(self.passs.data, None)
|
|
||||||
self.refresh()
|
|
||||||
|
|
||||||
def create_toolbar(self):
|
def create_toolbar(self):
|
||||||
toolbar = Gtk.Toolbar()
|
toolbar = Gtk.Toolbar()
|
||||||
|
|
||||||
@@ -329,10 +323,8 @@ class GTKPass(Gtk.Window):
|
|||||||
|
|
||||||
def on_new_dir(self, button):
|
def on_new_dir(self, button):
|
||||||
if self._selected is None:
|
if self._selected is None:
|
||||||
print('none selected')
|
|
||||||
path = ''
|
path = ''
|
||||||
else:
|
else:
|
||||||
print(f'{self._selected} selected')
|
|
||||||
path = self._selected
|
path = self._selected
|
||||||
|
|
||||||
dialog = NewDirDialog(self, path)
|
dialog = NewDirDialog(self, path)
|
||||||
@@ -340,7 +332,7 @@ class GTKPass(Gtk.Window):
|
|||||||
dirname = dialog.get_dirname()
|
dirname = dialog.get_dirname()
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
if response != Gtk.ResponseType.OK:
|
if response != Gtk.ResponseType.OK or not dirname:
|
||||||
return
|
return
|
||||||
|
|
||||||
result, msg = self.passs.new_dir(os.path.join(path, dirname))
|
result, msg = self.passs.new_dir(os.path.join(path, dirname))
|
||||||
@@ -350,11 +342,22 @@ class GTKPass(Gtk.Window):
|
|||||||
message_type=Gtk.MessageType.INFO,
|
message_type=Gtk.MessageType.INFO,
|
||||||
buttons=Gtk.ButtonsType.CLOSE,
|
buttons=Gtk.ButtonsType.CLOSE,
|
||||||
text='There was an error')
|
text='There was an error')
|
||||||
|
|
||||||
dialog.format_secondary_text(msg)
|
dialog.format_secondary_text(msg)
|
||||||
dialog.run()
|
dialog.run()
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
self.recreate_tree_store()
|
selection = self.treeview.get_selection()
|
||||||
|
if not selection:
|
||||||
|
return
|
||||||
|
tree_model_filter, tree_paths = selection.get_selected_rows()
|
||||||
|
tree_store = tree_model_filter.get_model()
|
||||||
|
tree_iter = tree_store.get_iter(tree_paths[0])
|
||||||
|
|
||||||
|
self.tree_store.append(tree_iter, [True, dirname,
|
||||||
|
Pango.Weight.NORMAL, "folder",
|
||||||
|
os.path.join(path, dirname), False])
|
||||||
|
|
||||||
|
|
||||||
def on_delete(self, button):
|
def on_delete(self, button):
|
||||||
if not self._selected:
|
if not self._selected:
|
||||||
@@ -385,7 +388,16 @@ class GTKPass(Gtk.Window):
|
|||||||
dialog.format_secondary_text(msg)
|
dialog.format_secondary_text(msg)
|
||||||
dialog.run()
|
dialog.run()
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
self.recreate_tree_store()
|
self._selected = None
|
||||||
|
|
||||||
|
# remove selected branch/leaf from store
|
||||||
|
selection = self.treeview.get_selection()
|
||||||
|
tree_model_filter, tree_paths = selection.get_selected_rows()
|
||||||
|
tree_store = tree_model_filter.get_model()
|
||||||
|
|
||||||
|
for path in tree_paths:
|
||||||
|
tree_iter = tree_store.get_iter(path)
|
||||||
|
tree_store.remove(tree_iter)
|
||||||
|
|
||||||
def on_key_press_event(self, widget, event):
|
def on_key_press_event(self, widget, event):
|
||||||
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
|
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
|
||||||
|
|||||||
Reference in New Issue
Block a user