prompt_window.xml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <class name="PromptWindow">
  2. <relationships>
  3. <inheritance class="tk.Toplevel" priority="1"/>
  4. <inheritance class="MvKWidget" priority="0"/>
  5. <association name="buttons" class="Button"/>
  6. <association name="parent" class="A"/>
  7. </relationships>
  8. <constructor>
  9. <parameter name="entries"/>
  10. <parameter name="options"/>
  11. <super class="tk.TopLevel"/>
  12. <super class="MvKWidget"/>
  13. <body>
  14. self.entries = {}
  15. self.frame = tk.Frame(self)
  16. counter = 0
  17. for k, v in entries.items():
  18. label = tk.Label(self.frame, text=k)
  19. entry = tk.Entry(self.frame, **options.get(k, {}))
  20. entry.insert(0, v)
  21. label.grid(row=counter, column=0)
  22. entry.grid(row=counter, column=1)
  23. counter += 1
  24. self.entries[k] = entry
  25. self.frame.pack()
  26. </body>
  27. </constructor>
  28. <destructor>
  29. <body>
  30. self.destroy()
  31. </body>
  32. </destructor>
  33. <scxml initial="init">
  34. <state id="init" initial="init_button_OK">
  35. <state id="init_button_OK">
  36. <onentry>
  37. <raise event="create_instance" scope="cd">
  38. <parameter expr="'buttons'"/>
  39. <parameter expr="'Button'"/>
  40. <parameter expr="{'parent': self, 'visual': TextVisual('OK'), 'tooltip_text': 'Accept values', 'event_parameters': 'OK'}"/>
  41. </raise>
  42. </onentry>
  43. <transition event="instance_created" target="../../root">
  44. <parameter name="association_name"/>
  45. <raise event="start_instance" scope="cd">
  46. <parameter expr="association_name"/>
  47. </raise>
  48. <script>
  49. self.button = association_name
  50. </script>
  51. </transition>
  52. </state>
  53. </state>
  54. <state id="root">
  55. <transition event="button_pressed" cond="event_name == 'OK'" target="../closing">
  56. <parameter name="event_name"/>
  57. <script>
  58. results = {}
  59. for k, v in self.entries.items():
  60. results[k] = v.get()
  61. </script>
  62. <raise event="prompt_results" scope="narrow" target="'parent'">
  63. <parameter expr="results"/>
  64. </raise>
  65. </transition>
  66. <transition event="window-close" cond="ID == id(self)" target="../closing">
  67. <parameter name="ID"/>
  68. </transition>
  69. </state>
  70. <state id="closing">
  71. <onentry>
  72. <raise event="delete_instance" scope="cd">
  73. <parameter expr="self.button"/>
  74. </raise>
  75. </onentry>
  76. <transition event="instance_deleted" target="../close"/>
  77. </state>
  78. <state id="close">
  79. <onentry>
  80. <raise event="close_window" scope="broad"/>
  81. </onentry>
  82. </state>
  83. </scxml>
  84. </class>