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

  1. import npyscreen
  2. import bisect
  3. class RemovableMulti(npyscreen.MultiLineAction):
  4. def actionHighlighted(self, act_on_this, keypress):
  5. self.remove_item()
  6. def register_oppisite(self, opposite):
  7. self.opposite = opposite
  8. opposite.opposite = self
  9. def remove_item(self):
  10. selected_value = self.values[self.cursor_line]
  11. del self.values[self.cursor_line]
  12. bisect.insort(self.opposite.values, selected_value)
  13. self.opposite.display()
  14. self.display()
  15. class BoxedRemovableMulti(npyscreen.BoxTitle):
  16. _contained_widget = RemovableMulti
  17. class AddRemoveForm(npyscreen.ActionFormV2):
  18. def create(self):
  19. self.keepers = self.add(
  20. BoxedRemovableMulti,
  21. values=sorted(self.parentApp.starting_values),
  22. name="Words to keep",
  23. max_height=10
  24. )
  25. self.to_remove = self.add(
  26. BoxedRemovableMulti, values=[], name="Words to remove",
  27. max_height=10
  28. )
  29. self.keepers.entry_widget.register_oppisite(
  30. self.to_remove.entry_widget)
  31. def on_cancel(self):
  32. self.canceled = True
  33. def on_ok(self):
  34. self.canceled = False
  35. def afterEditing(self):
  36. self.parentApp.setNextForm(None)
  37. class RemoveWordsActivity(npyscreen.NPSAppManaged):
  38. def __init__(self, starting_values, *args, **kwargs):
  39. super().__init__(*args, **kwargs)
  40. self.starting_values = starting_values
  41. def onStart(self):
  42. self.addForm('MAIN', AddRemoveForm,
  43. name="Exclude Words", minimum_lines=0, minimum_columns=0)
  44. def get_results(self):
  45. form = self.getForm('MAIN')
  46. vals = form.to_remove.entry_widget.values
  47. canceled = form.canceled
  48. return canceled, vals
  49. if __name__ == "__main__":
  50. values = [
  51. 'hello',
  52. 'return',
  53. 'butt',
  54. 'fuck',
  55. 'abcdefghijklmnopqrstuvwxyz'
  56. ]
  57. app = RemoveWordsActivity(values)
  58. app.run()