From 026cba3aeabf5a394c83384ccc9a469fa9be559e Mon Sep 17 00:00:00 2001 From: Raphael Roberts Date: Wed, 22 May 2019 19:09:18 -0500 Subject: [PATCH] Added word remove dialog --- word_remove_dialog.py | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 word_remove_dialog.py diff --git a/word_remove_dialog.py b/word_remove_dialog.py new file mode 100644 index 0000000..3ccbf34 --- /dev/null +++ b/word_remove_dialog.py @@ -0,0 +1,70 @@ +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=[], 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, starting_values, *args, **kwargs): + super().__init__(*args, **kwargs) + self.starting_values = starting_values + + def onStart(self): + self.addForm('MAIN', AddRemoveForm, name="Exclude Words") + + 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 = list(range(1, 10+1)) + app = RemoveWordsActivity(values) + app.run()