You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.0 KiB
77 lines
2.0 KiB
import npyscreen
|
|
import bisect
|
|
|
|
|
|
class RemovableMulti(npyscreen.MultiLineAction):
|
|
def actionHighlighted(self, act_on_this, keypress):
|
|
self.remove_item()
|
|
|
|
def register_oppisite(self, opposite):
|
|
self.opposite = opposite
|
|
opposite.opposite = self
|
|
|
|
def remove_item(self):
|
|
selected_value = self.values[self.cursor_line]
|
|
del self.values[self.cursor_line]
|
|
bisect.insort(self.opposite.values, selected_value)
|
|
|
|
self.opposite.display()
|
|
self.display()
|
|
|
|
|
|
class BoxedRemovableMulti(npyscreen.BoxTitle):
|
|
_contained_widget = RemovableMulti
|
|
|
|
|
|
class AddRemoveForm(npyscreen.ActionFormV2):
|
|
def create(self):
|
|
self.keepers = self.add(
|
|
BoxedRemovableMulti,
|
|
values=sorted(self.parentApp.starting_values),
|
|
name="Words to keep",
|
|
max_height=10,
|
|
)
|
|
self.to_remove = self.add(
|
|
BoxedRemovableMulti,
|
|
values=sorted(self.parentApp.starting_excludes),
|
|
name="Words to remove",
|
|
max_height=10,
|
|
)
|
|
self.keepers.entry_widget.register_oppisite(self.to_remove.entry_widget)
|
|
|
|
def on_cancel(self):
|
|
self.canceled = True
|
|
|
|
def on_ok(self):
|
|
self.canceled = False
|
|
|
|
def afterEditing(self):
|
|
self.parentApp.setNextForm(None)
|
|
|
|
|
|
class RemoveWordsActivity(npyscreen.NPSAppManaged):
|
|
def __init__(self, words, excludes, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.starting_values = words
|
|
self.starting_excludes = excludes
|
|
|
|
def onStart(self):
|
|
self.addForm(
|
|
"MAIN",
|
|
AddRemoveForm,
|
|
name="Exclude Words",
|
|
minimum_lines=0,
|
|
minimum_columns=0,
|
|
)
|
|
|
|
def get_results(self):
|
|
form = self.getForm("MAIN")
|
|
vals = form.to_remove.entry_widget.values
|
|
canceled = form.canceled
|
|
return canceled, vals
|
|
|
|
|
|
if __name__ == "__main__":
|
|
values = ["hello", "return", "butt", "fuck", "abcdefghijklmnopqrstuvwxyz"]
|
|
app = RemoveWordsActivity(values)
|
|
app.run()
|