This repository has been archived on 2025-06-04. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
fl0w-old/Sublime/fl0w/SublimeMenu.py
2015-10-25 17:32:23 +01:00

85 lines
No EOL
2.1 KiB
Python

class Input:
def __init__(self, caption, initial_text="", on_done=None, on_change=None, on_cancel=None):
self.caption = caption
self.initial_text = initial_text
self.on_done = on_done
self.on_change = on_change
self.on_cancel = on_cancel
def invoke(self, window):
window.show_input_panel(self.caption, self.initial_text,
self.on_done, self.on_change, self.on_cancel)
class Item:
def __init__(self, name, description="", action=None, items=None, input=None):
self.name = name
self.description = description
self.action = action
self.items = items
self.input = input
def __eq__(self, other):
return self.__dict__ == other.__dict__
class Items:
def __init__(self, selected_index=-1, on_highlight=None):
self.selected_index = selected_index
self.on_highlight = on_highlight
self.items = {}
self.item_names = []
self.window = None
self.back = None
def invoke(self, window, back=None):
self.window = window
if back:
items = [["Back", "Back to previous menu"]] + self.item_names[:]
print(items)
self.back = back
else:
items = self.item_names
self.back = None
window.show_quick_panel(items, self._action,
flags=0, selected_index=self.selected_index,
on_highlight=self.on_highlight)
def _action(self, item_id):
if item_id != -1:
if self.back:
if item_id != 0:
item = self.items[item_id - 1]
else:
self.back.invoke(self.window)
return
else:
item = self.items[item_id]
if item.action != None:
item.action()
if item.input != None:
item.input.invoke(self.window)
if item.items != None:
item.items.invoke(self.window, back=self)
def add_item(self, item):
if len(self.items) > 0:
item_id = tuple(self.items.keys())[-1] + 1
else:
item_id = 0
self.items[item_id] = item
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():
for i in self.items:
if self.items[i] == item:
del self.items[i]
del self.item_names[i]
return True
return False