Major refactor, Items now names Entries
This commit is contained in:
parent
240114e0cd
commit
f95c83be52
1 changed files with 44 additions and 41 deletions
|
@ -12,73 +12,76 @@ class Input:
|
||||||
self.on_done, self.on_change, self.on_cancel)
|
self.on_done, self.on_change, self.on_cancel)
|
||||||
|
|
||||||
|
|
||||||
class Item:
|
class Entry:
|
||||||
def __init__(self, name, description="", action=None, items=None, input=None):
|
def __init__(self, name, description="", action=None, kwargs={}, sub_menu=None, input=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.description = description
|
self.description = description
|
||||||
self.action = action
|
self.action = action
|
||||||
self.items = items
|
self.kwargs = kwargs
|
||||||
|
self.sub_menu = sub_menu
|
||||||
self.input = input
|
self.input = input
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.__dict__ == other.__dict__
|
return self.__dict__ == other.__dict__
|
||||||
|
|
||||||
|
|
||||||
class Items:
|
class Menu:
|
||||||
def __init__(self, selected_index=-1, on_highlight=None):
|
def __init__(self, selected_index=-1, on_highlight=None, subtitles=True):
|
||||||
self.selected_index = selected_index
|
self.selected_index = selected_index
|
||||||
self.on_highlight = on_highlight
|
self.on_highlight = on_highlight
|
||||||
self.items = {}
|
self.subtitles = subtitles
|
||||||
self.item_names = []
|
self.entries = {}
|
||||||
self.window = None
|
self.window = None
|
||||||
self.back = None
|
self.back = None
|
||||||
|
|
||||||
def invoke(self, window, back=None):
|
def invoke(self, window, back=None):
|
||||||
self.window = window
|
self.window = window
|
||||||
if back:
|
|
||||||
items = [["Back", "Back to previous menu"]] + self.item_names[:]
|
|
||||||
self.back = back
|
self.back = back
|
||||||
else:
|
entries = self.menu_entries
|
||||||
items = self.item_names
|
if back:
|
||||||
self.back = None
|
entries.insert(0, ["Back", "Back to previous menu"])
|
||||||
window.show_quick_panel(items, self._action,
|
if not self.subtitles:
|
||||||
|
for entry_index in range(len(entries)):
|
||||||
|
del entries[entry_index][1]
|
||||||
|
window.show_quick_panel(entries, self._action,
|
||||||
flags=0, selected_index=self.selected_index,
|
flags=0, selected_index=self.selected_index,
|
||||||
on_highlight=self.on_highlight)
|
on_highlight=self.on_highlight)
|
||||||
|
|
||||||
def _action(self, item_id):
|
def _action(self, entry_id):
|
||||||
if item_id != -1:
|
if entry_id != -1:
|
||||||
if self.back:
|
if self.back:
|
||||||
if item_id != 0:
|
if entry_id != 0:
|
||||||
item = self.items[item_id - 1]
|
entry = self.entries[entry_id - 1]
|
||||||
else:
|
else:
|
||||||
self.back.invoke(self.window)
|
self.back.invoke(self.window)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
item = self.items[item_id]
|
entry = self.entries[entry_id]
|
||||||
if item.action != None:
|
if entry.action != None:
|
||||||
item.action()
|
entry.action(**entry.kwargs)
|
||||||
if item.input != None:
|
if entry.input != None:
|
||||||
item.input.invoke(self.window)
|
entry.input.invoke(self.window)
|
||||||
if item.items != None:
|
if entry.sub_menu != None:
|
||||||
item.items.invoke(self.window, back=self)
|
entry.sub_menu.invoke(self.window, back=self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def menu_entries(self):
|
||||||
|
entries = []
|
||||||
|
for entry_id in self.entries:
|
||||||
|
entries.append([self.entries[entry_id].name, self.entries[entry_id].description])
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
def add_item(self, item):
|
def add(self, entry):
|
||||||
if len(self.items) > 0:
|
if len(self.entries) > 0:
|
||||||
item_id = tuple(self.items.keys())[-1] + 1
|
entry_id = tuple(self.entries.keys())[-1] + 1
|
||||||
else:
|
else:
|
||||||
item_id = 0
|
entry_id = 0
|
||||||
self.items[item_id] = item
|
self.entries[entry_id] = entry
|
||||||
if item.description != None:
|
|
||||||
self.item_names.append([item.name, item.description])
|
|
||||||
else:
|
|
||||||
self.item_names.append([item.name, ""])
|
|
||||||
|
|
||||||
def rm_item(self, item):
|
|
||||||
if item in self.items.values():
|
def remove(self, entry):
|
||||||
for i in self.items:
|
if entry in self.entries.values():
|
||||||
if self.items[i] == item:
|
for entry_id in self.entries:
|
||||||
del self.items[i]
|
if self.entries[entry_id] == entry:
|
||||||
del self.item_names[i]
|
del self.entries[entry_id]
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
Reference in a new issue