Rework record deletion code.
We used to attempt to remove deleted records from the listing as soon as we deleted them. This caused all sorts of rendering bugs (usually involving not removing the record from the list) which in turn led to users retrying the operation, which led to them unintentionally deleting multiple records. Now the deleted records are marked by a color change and are removed from the database automatically when it is written to disk. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
This commit is contained in:
parent
fd87df193e
commit
ff1c3752e9
1 changed files with 18 additions and 14 deletions
32
newfol
32
newfol
|
|
@ -55,7 +55,7 @@ class KeyboardShortcuts(dict):
|
|||
self["meta d"] = "right"
|
||||
self["meta k"] = "left"
|
||||
self["meta g"] = "delete"
|
||||
#self["meta y"] = "remove"
|
||||
self["meta y"] = "remove"
|
||||
self["tab"] = "next-field"
|
||||
self["meta f"] = "next-field"
|
||||
self["meta j"] = "previous-field"
|
||||
|
|
@ -774,22 +774,24 @@ class RecordListView(ListView):
|
|||
else:
|
||||
self._render_type = "urwid"
|
||||
def _delete_selected_record(self):
|
||||
rec = self.items[self._get_selected_item_position()]
|
||||
recs = list(filter(lambda x: x is not rec, DatabaseData().records))
|
||||
DatabaseData().records = recs
|
||||
self.items = list(filter(lambda x: x is not rec, self.items))
|
||||
try:
|
||||
self._delete_record(rec)
|
||||
except:
|
||||
pass
|
||||
self.rerender(self.loop)
|
||||
selected = self._get_selected_item_position()
|
||||
rec = self.items[selected]
|
||||
rec.deleted = True
|
||||
self.render(self.loop)
|
||||
self.listwalker.set_focus(selected)
|
||||
def _render_records(self, loop, title, recs, fields):
|
||||
self.loop = loop
|
||||
formatter = RecordFormatter(recs, fields)
|
||||
content = urwid.SimpleListWalker([
|
||||
urwid.AttrMap(urwid.Text(text), "item",
|
||||
"focused-item")
|
||||
for text in formatter.format()])
|
||||
def attr_maps(formatter, recs):
|
||||
pairs = zip(formatter.format(), recs)
|
||||
result = []
|
||||
for text, rec in pairs:
|
||||
attrs = ["item", "focused-item"]
|
||||
if rec.deleted:
|
||||
attrs = ["deleted", "focused-deleted"]
|
||||
result.append(urwid.AttrMap(urwid.Text(text), *attrs))
|
||||
return result
|
||||
content = urwid.SimpleListWalker(attr_maps(formatter, recs))
|
||||
if self._render_type == "urwid":
|
||||
return self._render_listview(title, recs, content)
|
||||
elif self._render_type == "editor-ro":
|
||||
|
|
@ -1057,6 +1059,8 @@ def start_curses():
|
|||
palette = [
|
||||
('bg', 'black', 'yellow', '', 'black', '#ffa'),
|
||||
('text', 'black', 'yellow', '', '#860', '#ffa'),
|
||||
('focused-deleted', 'dark gray', 'light red', '', '#666', '#a00'),
|
||||
('deleted', 'light red', 'dark gray', '', '#a00', '#666'),
|
||||
('focused-item', 'yellow', 'black', '', '#ffa', '#860'),
|
||||
('item', 'text'),
|
||||
('description', 'text'),
|
||||
|
|
|
|||
Loading…
Reference in a new issue