canvas.xml 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <class name="Canvas">
  2. <relationships>
  3. <association name="parent" class="A" min="1" max="1" />
  4. <inheritance class="SCCDWidget" priority='0'/>
  5. <inheritance class="tk.Canvas" priority='1'/>
  6. </relationships>
  7. <constructor>
  8. <parameter name="parent" />
  9. <super class="SCCDWidget"/>
  10. <super class="tk.Canvas">
  11. <parameter expr="parent" />
  12. <parameter expr="**{'scrollregion': (0, 0, parent.winfo_screenwidth()*2, parent.winfo_screenheight() * 2)}"/>
  13. </super>
  14. <body>
  15. vbar = tk.Scrollbar(self, orient=tk.VERTICAL)
  16. vbar.config(command=self.yview)
  17. vbar.pack(side=tk.RIGHT, fill=tk.Y, pady=(0, 16))
  18. hbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
  19. hbar.config(command=self.xview)
  20. hbar.pack(side=tk.BOTTOM, fill=tk.X)
  21. self.config(background='white', yscrollcommand=vbar.set, xscrollcommand=hbar.set)
  22. self.focus_set()
  23. self.elements = {}
  24. self.shift = {}
  25. </body>
  26. </constructor>
  27. <destructor>
  28. <body>
  29. self.delete("all")
  30. self.destroy()
  31. </body>
  32. </destructor>
  33. <scxml initial="main">
  34. <state id="main">
  35. <transition target="../ready">
  36. <raise event="tk_widget" scope="narrow" target="'parent'">
  37. <parameter expr="self"/>
  38. </raise>
  39. </transition>
  40. </state>
  41. <state id="ready">
  42. <transition event="clear_canvas" target=".">
  43. <script>
  44. self.delete("all")
  45. self.elements = {}
  46. self.shift = {}
  47. </script>
  48. </transition>
  49. <transition event="define_group" target=".">
  50. <parameter name="element"/>
  51. <script>
  52. self.elements[element["id"]] = element
  53. self.shift[element["id"]] = (element["x"], element["y"])
  54. </script>
  55. </transition>
  56. <transition event="define_contains" target=".">
  57. <parameter name="element"/>
  58. <script>
  59. self.shift[element["__target"]] = self.shift[element["__source"]]
  60. </script>
  61. </transition>
  62. <transition event="draw_canvas" target=".">
  63. <parameter name="element"/>
  64. <script>
  65. print("Render: " + str(element))
  66. self.elements[element["id"]] = element
  67. shift_x, shift_y = self.shift[element["id"]]
  68. elem_x = shift_x + element["x"]
  69. elem_y = shift_y + element["y"]
  70. if element["type"] == "Rectangle":
  71. self.create_rectangle(elem_x, elem_y, elem_x + element["width"], elem_y + element["height"], fill=element["fillColour"], outline=element["lineColour"])
  72. elif element["type"] == "Text":
  73. self.create_text(elem_x, elem_y, fill=element["lineColour"], text=element["text"], anchor=tk.NW)
  74. elif element["type"] == "Line":
  75. self.create_line(elem_x, elem_y, shift_x + element["targetX"], shift_y + element["targetY"], fill=element["lineColour"], width=element["lineWidth"])
  76. else:
  77. print("Undefined render format: " + str(element))
  78. </script>
  79. </transition>
  80. </state>
  81. </scxml>
  82. </class>