main_window.xml 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. <class name="MainWindow">
  2. <relationships>
  3. <inheritance class="tk.Toplevel" priority="1"/>
  4. <inheritance class="SCCDWidget" priority="0"/>
  5. <association name="parent" class="A"/>
  6. <association name="generic_toolbars" class="Toolbar"/>
  7. <association name="model_toolbars" class="Toolbar"/>
  8. <association name="subwindow" class="Window"/>
  9. <association name="canvas" class="Canvas"/>
  10. <association name="progress_bar" class="ProgressBar"/>
  11. </relationships>
  12. <constructor>
  13. <super class="tk.Toplevel"/>
  14. <super class="SCCDWidget"/>
  15. <body>
  16. self.toolbar_frame = tk.Frame(self)
  17. self.canvas_frame = tk.Frame(self)
  18. self.progressbar_frame = tk.Frame(self)
  19. self.toolbar_frame.pack(fill=tk.X)
  20. self.canvas_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
  21. self.progressbar_frame.pack(fill=tk.X)
  22. self.model_loaded = False
  23. global current_mapper
  24. current_mapper = None
  25. global current_rendered_model
  26. current_rendered_model = None
  27. global current_metamodel
  28. current_metamodel = None
  29. global current_model
  30. current_model = None
  31. </body>
  32. </constructor>
  33. <destructor>
  34. <body>
  35. self.destroy()
  36. </body>
  37. </destructor>
  38. <scxml initial="init">
  39. <parallel id="init">
  40. <state id="init" initial="init">
  41. <state id="init" initial="generic_toolbar">
  42. <state id="generic_toolbar">
  43. <onentry>
  44. <raise event="create_instance" scope="cd">
  45. <parameter expr="'generic_toolbars'"/>
  46. <parameter expr="'GenericToolbar'"/>
  47. <parameter expr="self.toolbar_frame"/>
  48. </raise>
  49. </onentry>
  50. <transition event="instance_created" target="../pack_generic">
  51. <parameter name="association_name"/>
  52. <raise event="start_instance" scope="cd">
  53. <parameter expr="association_name"/>
  54. </raise>
  55. </transition>
  56. </state>
  57. <state id="pack_generic">
  58. <transition event="tk_widget" target="../progressbar">
  59. <parameter name="tk_elem"/>
  60. <script>
  61. tk_elem.pack(anchor=tk.NW)
  62. </script>
  63. </transition>
  64. </state>
  65. <state id="progressbar">
  66. <onentry>
  67. <raise event="create_instance" scope="cd">
  68. <parameter expr="'progress_bar'"/>
  69. <parameter expr="'ProgressBar'"/>
  70. <parameter expr="{'parent': self.progressbar_frame}"/>
  71. </raise>
  72. </onentry>
  73. <transition event="instance_created" target="../pack_progressbar">
  74. <parameter name="association_name"/>
  75. <raise event="start_instance" scope="cd">
  76. <parameter expr="association_name"/>
  77. </raise>
  78. </transition>
  79. </state>
  80. <state id="pack_progressbar">
  81. <transition event="tk_widget" target="../../running">
  82. <parameter name="tk_elem"/>
  83. <script>
  84. tk_elem.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.TRUE)
  85. </script>
  86. </transition>
  87. </state>
  88. </state>
  89. <state id="running" initial="idle">
  90. <state id="idle">
  91. <onentry>
  92. <raise event="update_status" scope="narrow" target="'progress_bar'">
  93. <parameter expr="0"/>
  94. <parameter expr="'Ready for action!'"/>
  95. </raise>
  96. </onentry>
  97. <transition event="create_new_model" target="../create_new_model"/>
  98. <transition event="open_model" target="../open_model"/>
  99. <transition event="rerender_model" target="../rerender_model"/>
  100. <transition event="new_rendered" cond="current_mapper is not None" target="../new_rendered"/>
  101. <transition event="verify" target="../verify_model"/>
  102. <transition event="conf_bottom" target="../conf_bottom"/>
  103. <transition event="custom_MM" target="../custom_MM"/>
  104. <transition event="upload_MVC" target="../upload_MVC"/>
  105. <transition event="add_object_diagrams" target="../add_object_diagrams"/>
  106. <transition event="modify_defined_attrs" target="../modify_defined_attrs">
  107. <parameter name="as_element"/>
  108. <script>
  109. self.as_element = as_element
  110. </script>
  111. </transition>
  112. <transition event="change_metamodel" target="../change_metamodel">
  113. <parameter name="new_metamodel"/>
  114. <script>
  115. global current_metamodel
  116. current_metamodel = new_metamodel
  117. </script>
  118. </transition>
  119. <transition event="change_mapper" target="../change_mapper">
  120. <parameter name="new_mapper"/>
  121. <script>
  122. global current_mapper
  123. current_mapper = new_mapper
  124. print("Switch mapper to " + str(new_mapper))
  125. </script>
  126. </transition>
  127. <transition event="change_rendered" target="../change_rendered">
  128. <parameter name="new_rendered"/>
  129. <script>
  130. global current_rendered_model
  131. current_rendered_model = new_rendered
  132. </script>
  133. </transition>
  134. <transition event="select_for_creation" target=".">
  135. <parameter name="element_name"/>
  136. <raise event="select_for_creation" scope="narrow" target="'canvas'">
  137. <parameter expr="element_name"/>
  138. </raise>
  139. </transition>
  140. </state>
  141. <state id="modify_defined_attrs" initial="create_window">
  142. <state id="create_window">
  143. <onentry>
  144. <raise event="create_instance" scope="cd">
  145. <parameter expr="'subwindow'"/>
  146. <parameter expr="'AttributeEditor'"/>
  147. <parameter expr="current_model"/>
  148. <parameter expr="self.as_element"/>
  149. </raise>
  150. </onentry>
  151. <transition event="instance_created" target="../wait_for_finished">
  152. <parameter name="assoc_name"/>
  153. <raise event="start_instance" scope="cd">
  154. <parameter expr="assoc_name"/>
  155. </raise>
  156. <script>
  157. self.current_window = assoc_name
  158. </script>
  159. </transition>
  160. </state>
  161. <state id="wait_for_finished">
  162. <transition event="close_window" target="../../rerender_model">
  163. <raise event="delete_instance" scope="cd">
  164. <parameter expr="self.current_window"/>
  165. </raise>
  166. </transition>
  167. </state>
  168. </state>
  169. <state id="add_object_diagrams" initial="init">
  170. <state id="init">
  171. <onentry>
  172. <raise event="mv_request" scope="broad">
  173. <parameter expr="'transformation_add_AL'"/>
  174. <parameter expr="[{'rendered': 'formalisms/MM_render', 'abstract': current_metamodel}, {'rendered': 'formalisms/MM_render'}, 'models/render_OD/' + current_metamodel, open('models/render_OD.alc', 'r').read()]"/>
  175. </raise>
  176. <raise event="update_status" scope="narrow" target="'progress_bar'">
  177. <parameter expr="10"/>
  178. <parameter expr="'Adding transformation...'"/>
  179. </raise>
  180. </onentry>
  181. <transition event="mv_response" target="../modify_render_OD">
  182. <parameter name="context"/>
  183. <raise event="update_status" scope="narrow" target="'progress_bar'">
  184. <parameter expr="25"/>
  185. <parameter expr="'Switching contexts...'"/>
  186. </raise>
  187. <script>
  188. self.context = context
  189. </script>
  190. </transition>
  191. <transition event="mv_exception" target="../../idle"/>
  192. </state>
  193. <state id="modify_render_OD" initial="exit">
  194. <onexit>
  195. <script>
  196. self.context = None
  197. </script>
  198. </onexit>
  199. <state id="exit">
  200. <onentry>
  201. <raise event="mv_request_context" scope="broad">
  202. <parameter expr="'exit'"/>
  203. <parameter expr="[]"/>
  204. <parameter expr="self.context"/>
  205. </raise>
  206. <raise event="update_status" scope="narrow" target="'progress_bar'">
  207. <parameter expr="30"/>
  208. <parameter expr="'Modifying transformation merged metamodel...'"/>
  209. </raise>
  210. </onentry>
  211. <transition event="mv_response" target="../../../open_model/search_CS_mappers">
  212. <script>
  213. global current_mapper
  214. current_mapper = 'models/render_OD/' + current_metamodel
  215. </script>
  216. </transition>
  217. </state>
  218. </state>
  219. </state>
  220. <state id="upload_MVC" initial="load_code">
  221. <state id="load_code">
  222. <onentry>
  223. <script>
  224. from tkFileDialog import askopenfilename
  225. self.filename = askopenfilename()
  226. </script>
  227. </onentry>
  228. <transition cond="self.filename is not None" target="../overwriting_model">
  229. <raise event="mv_request" scope="broad">
  230. <parameter expr="'model_overwrite'"/>
  231. <parameter expr="[current_model, open(self.filename, 'r').read()]"/>
  232. </raise>
  233. <raise event="update_status" scope="narrow" target="'progress_bar'">
  234. <parameter expr="10"/>
  235. <parameter expr="'Uploading model...'"/>
  236. </raise>
  237. </transition>
  238. <transition cond="self.filename is None" target="../../idle"/>
  239. </state>
  240. <state id="overwriting_model">
  241. <transition event="mv_response" target="../../rerender_model">
  242. <raise event="update_status" scope="narrow" target="'progress_bar'">
  243. <parameter expr="50"/>
  244. <parameter expr="'Rerendering model...'"/>
  245. </raise>
  246. </transition>
  247. </state>
  248. </state>
  249. <state id="change_metamodel">
  250. <onentry>
  251. <script>
  252. print("MM -> " + current_metamodel)
  253. </script>
  254. <raise event="mv_request" scope="broad">
  255. <parameter expr="'alter_context'"/>
  256. <parameter expr="[current_model, current_metamodel]"/>
  257. </raise>
  258. <raise event="update_status" scope="narrow" target="'progress_bar'">
  259. <parameter expr="20"/>
  260. <parameter expr="'Storing model context...'"/>
  261. </raise>
  262. </onentry>
  263. <transition event="mv_response" target="../open_model/search_CS_mappers"/>
  264. </state>
  265. <state id="conf_bottom" initial="check_if_exists">
  266. <state id="check_if_exists">
  267. <transition cond="'formalisms/Bottom' in self.allowed_metamodels" target="../../idle"/>
  268. <transition cond="'formalisms/Bottom' not in self.allowed_metamodels" target="../add_bottom"/>
  269. </state>
  270. <state id="add_bottom">
  271. <onentry>
  272. <raise event="mv_request" scope="broad">
  273. <parameter expr="'conformance_add'"/>
  274. <parameter expr="[current_model, 'formalisms/Bottom']"/>
  275. </raise>
  276. <raise event="update_status" scope="narrow" target="'progress_bar'">
  277. <parameter expr="10"/>
  278. <parameter expr="'Storing model context...'"/>
  279. </raise>
  280. <script>
  281. global current_metamodel
  282. current_metamodel = 'formalisms/Bottom'
  283. </script>
  284. </onentry>
  285. <transition event="mv_response" target="../../open_model/search_metamodels"/>
  286. </state>
  287. </state>
  288. <state id="custom_MM" initial="query">
  289. <state id="query">
  290. <onentry>
  291. <raise event="create_instance" scope="cd">
  292. <parameter expr="'subwindow'"/>
  293. <parameter expr="'Browser'"/>
  294. <parameter expr="'Select metamodel to use.'"/>
  295. <parameter expr="['formalisms/SimpleClassDiagrams']"/>
  296. </raise>
  297. <raise event="update_status" scope="narrow" target="'progress_bar'">
  298. <parameter expr="0"/>
  299. <parameter expr="'Browsing for metamodel...'"/>
  300. </raise>
  301. </onentry>
  302. <transition event="instance_created" target="../wait_for_metamodel">
  303. <parameter name="association_name"/>
  304. <raise event="start_instance" scope="cd">
  305. <parameter expr="association_name"/>
  306. </raise>
  307. <script>
  308. self.subwindow = association_name
  309. </script>
  310. </transition>
  311. </state>
  312. <state id="wait_for_metamodel" initial="wait_for_result">
  313. <onentry>
  314. <raise event="update_status" scope="narrow" target="'progress_bar'">
  315. <parameter expr="10"/>
  316. <parameter expr="'Browsing for model... OK'"/>
  317. </raise>
  318. </onentry>
  319. <state id="wait_for_result">
  320. <transition event="browse_result" cond="result not in self.allowed_metamodels" target="../got_result">
  321. <parameter name="result"/>
  322. <script>
  323. global current_metamodel
  324. current_metamodel = result
  325. </script>
  326. </transition>
  327. <transition event="close_window" target="../../../idle">
  328. <raise event="delete_instance" scope="cd">
  329. <parameter expr="self.subwindow"/>
  330. </raise>
  331. </transition>
  332. </state>
  333. <state id="got_result">
  334. <transition event="close_window" target="../mv_processing">
  335. <raise event="delete_instance" scope="cd">
  336. <parameter expr="self.subwindow"/>
  337. </raise>
  338. <raise event="mv_request" scope="broad">
  339. <parameter expr="'conformance_add'"/>
  340. <parameter expr="[current_model, current_metamodel]"/>
  341. </raise>
  342. </transition>
  343. </state>
  344. <state id="mv_processing">
  345. <transition event="mv_response" target="../../../open_model/search_metamodels"/>
  346. </state>
  347. </state>
  348. </state>
  349. <state id="change_mapper">
  350. <transition target="../open_model/search_CS_mappers"/>
  351. </state>
  352. <state id="change_rendered">
  353. <transition target="../rerender_model"/>
  354. </state>
  355. <state id="verify_model" initial="request">
  356. <state id="request">
  357. <onentry>
  358. <raise event="mv_request" scope="broad">
  359. <parameter expr="'verify'"/>
  360. <parameter expr="[current_model, current_metamodel]"/>
  361. </raise>
  362. </onentry>
  363. <transition event="mv_progress" target=".">
  364. <parameter name="result"/>
  365. <raise event="update_status" scope="narrow" target="'progress_bar'">
  366. <parameter expr="result * 100"/>
  367. <parameter expr="'Verifying...'"/>
  368. </raise>
  369. </transition>
  370. <transition event="mv_response" target="../show_result">
  371. <parameter name="result"/>
  372. <raise event="create_instance" scope="cd">
  373. <parameter expr="'subwindow'"/>
  374. <parameter expr="'Popup'"/>
  375. <parameter expr="result"/>
  376. </raise>
  377. </transition>
  378. </state>
  379. <state id="show_result">
  380. <transition event="instance_created" target="../wait_for_close">
  381. <parameter name="assoc_name"/>
  382. <raise event="start_instance" scope="cd">
  383. <parameter expr="assoc_name"/>
  384. </raise>
  385. </transition>
  386. </state>
  387. <state id="wait_for_close">
  388. <transition event="close_window" target="../../idle">
  389. <raise event="delete_instance" scope="cd">
  390. <parameter expr="'subwindow'"/>
  391. </raise>
  392. </transition>
  393. </state>
  394. </state>
  395. <state id="open_model" initial="query_model">
  396. <state id="query_model">
  397. <onentry>
  398. <raise event="create_instance" scope="cd">
  399. <parameter expr="'subwindow'"/>
  400. <parameter expr="'Browser'"/>
  401. <parameter expr="'Select model to open'"/>
  402. <parameter expr="[]"/>
  403. </raise>
  404. <raise event="update_status" scope="narrow" target="'progress_bar'">
  405. <parameter expr="0"/>
  406. <parameter expr="'Browsing for model...'"/>
  407. </raise>
  408. </onentry>
  409. <transition event="instance_created" target="../wait_for_model">
  410. <parameter name="association_name"/>
  411. <raise event="start_instance" scope="cd">
  412. <parameter expr="association_name"/>
  413. </raise>
  414. <script>
  415. self.subwindow = association_name
  416. </script>
  417. </transition>
  418. </state>
  419. <state id="wait_for_model">
  420. <transition event="close_window" target="../../idle">
  421. <raise event="delete_instance" scope="cd">
  422. <parameter expr="self.subwindow"/>
  423. </raise>
  424. <raise event="update_status" scope="narrow" target="'progress_bar'">
  425. <parameter expr="10"/>
  426. <parameter expr="'Browsing for model... OK'"/>
  427. </raise>
  428. </transition>
  429. <transition event="browse_result" target="../got_model">
  430. <parameter name="result"/>
  431. <script>
  432. global current_model
  433. current_model = result
  434. </script>
  435. </transition>
  436. </state>
  437. <state id="got_model">
  438. <transition event="close_window" target="../search_metamodels">
  439. <raise event="delete_instance" scope="cd">
  440. <parameter expr="self.subwindow"/>
  441. </raise>
  442. </transition>
  443. </state>
  444. <state id="search_metamodels">
  445. <onentry>
  446. <raise event="mv_request" scope="broad">
  447. <parameter expr="'model_types'"/>
  448. <parameter expr="[current_model]"/>
  449. </raise>
  450. <raise event="update_status" scope="narrow" target="'progress_bar'">
  451. <parameter expr="10"/>
  452. <parameter expr="'Querying existing metamodels...'"/>
  453. </raise>
  454. </onentry>
  455. <transition event="mv_response" target="../search_CS_mappers">
  456. <parameter name="result"/>
  457. <script>
  458. global current_metamodel
  459. print("Allowed metamodels: " + str(result))
  460. if len(result) > 0:
  461. current_metamodel = next(iter(result))
  462. else:
  463. current_metamodel = 'formalisms/Bottom'
  464. self.allowed_metamodels = result
  465. </script>
  466. <raise event="update_status" scope="narrow" target="'progress_bar'">
  467. <parameter expr="20"/>
  468. <parameter expr="'Querying existing metamodels... OK'"/>
  469. </raise>
  470. </transition>
  471. </state>
  472. <state id="search_CS_mappers">
  473. <onentry>
  474. <raise event="mv_request" scope="broad">
  475. <parameter expr="'transformation_between'"/>
  476. <parameter expr="[current_metamodel, 'formalisms/MM_render']"/>
  477. </raise>
  478. </onentry>
  479. <transition event="mv_response" target="../check_CS_mapper">
  480. <parameter name="result"/>
  481. <script>
  482. print("MM: " + str(current_metamodel))
  483. print("Allowed mappers: " + str(result))
  484. self.allowed_mappers = list(result)
  485. global current_mapper
  486. if len(result) > 0:
  487. if current_mapper not in result:
  488. current_mapper = next(iter(result))
  489. print("CHANGING MAPPER TO " + str(current_mapper))
  490. else:
  491. current_mapper = None
  492. print("REMOVING MAPPER")
  493. </script>
  494. </transition>
  495. </state>
  496. <state id="check_CS_mapper">
  497. <transition cond="current_mapper is None" target="../../rerender_model">
  498. <script>
  499. global current_rendered_model
  500. current_rendered_model = None
  501. self.allowed_rendered = []
  502. </script>
  503. <raise event="clear_canvas" scope="narrow" target="'canvas'"/>
  504. </transition>
  505. <transition cond="current_mapper is not None" target="../search_CS_rendered"/>
  506. </state>
  507. <state id="search_CS_rendered">
  508. <onentry>
  509. <raise event="mv_request" scope="broad">
  510. <parameter expr="'model_rendered'"/>
  511. <parameter expr="[current_model, current_mapper]"/>
  512. </raise>
  513. </onentry>
  514. <transition event="mv_response" target="../store_metamodel">
  515. <parameter name="result"/>
  516. <script>
  517. print("Allowed rendered: " + str(result))
  518. print("Current mapper: " + str(current_mapper))
  519. self.allowed_rendered = list(result)
  520. global current_rendered_model
  521. if (len(result) > 0):
  522. if current_rendered_model not in result:
  523. print("Reusing an existing rendered model")
  524. current_rendered_model = next(iter(result))
  525. else:
  526. print("Creating new rendered model!")
  527. current_rendered_model = "rendered/%s" % str(uuid.uuid4())
  528. self.allowed_rendered.append(current_rendered_model)
  529. </script>
  530. </transition>
  531. </state>
  532. <state id="store_metamodel">
  533. <onentry>
  534. <raise event="mv_request" scope="broad">
  535. <parameter expr="'alter_context'"/>
  536. <parameter expr="[current_model, current_metamodel]"/>
  537. </raise>
  538. <raise event="update_status" scope="narrow" target="'progress_bar'">
  539. <parameter expr="45"/>
  540. <parameter expr="'Storing model context...'"/>
  541. </raise>
  542. </onentry>
  543. <transition event="mv_response" target="../../rerender_model"/>
  544. </state>
  545. </state>
  546. <state id="new_rendered">
  547. <onentry>
  548. <script>
  549. global current_rendered_model
  550. current_rendered_model = "rendered/%s" % str(uuid.uuid4())
  551. self.allowed_rendered.append(current_rendered_model)
  552. </script>
  553. </onentry>
  554. <transition target="../rerender_model"/>
  555. </state>
  556. <state id="create_new_model" initial="query_metamodel">
  557. <state id="query_metamodel">
  558. <onentry>
  559. <raise event="create_instance" scope="cd">
  560. <parameter expr="'subwindow'"/>
  561. <parameter expr="'Browser'"/>
  562. <parameter expr="'Select metamodel to instantiate'"/>
  563. <parameter expr="['formalisms/SimpleClassDiagrams']"/>
  564. </raise>
  565. <raise event="update_status" scope="narrow" target="'progress_bar'">
  566. <parameter expr="5"/>
  567. <parameter expr="'Browsing for metamodel...'"/>
  568. </raise>
  569. </onentry>
  570. <transition event="instance_created" target="../wait_for_metamodel">
  571. <parameter name="association_name"/>
  572. <raise event="start_instance" scope="cd">
  573. <parameter expr="association_name"/>
  574. </raise>
  575. <script>
  576. self.subwindow = association_name
  577. </script>
  578. </transition>
  579. </state>
  580. <state id="wait_for_metamodel">
  581. <transition event="close_window" target="../../idle">
  582. <raise event="delete_instance" scope="cd">
  583. <parameter expr="self.subwindow"/>
  584. </raise>
  585. </transition>
  586. <transition event="browse_result" target="../got_mm">
  587. <parameter name="result"/>
  588. <script>
  589. global current_metamodel
  590. current_metamodel = result
  591. </script>
  592. </transition>
  593. </state>
  594. <state id="got_mm">
  595. <transition event="close_window" target="../prompt_model_name">
  596. <raise event="delete_instance" scope="cd">
  597. <parameter expr="self.subwindow"/>
  598. </raise>
  599. </transition>
  600. </state>
  601. <state id="prompt_model_name">
  602. <onentry>
  603. <raise event="create_instance" scope="cd">
  604. <parameter expr="'subwindow'"/>
  605. <parameter expr="'PromptWindow'"/>
  606. <parameter expr="{'Model name': ''}"/>
  607. <parameter expr="{}"/>
  608. </raise>
  609. <raise event="update_status" scope="narrow" target="'progress_bar'">
  610. <parameter expr="15"/>
  611. <parameter expr="'Prompt model name...'"/>
  612. </raise>
  613. </onentry>
  614. <transition event="instance_created" target="../waiting_for_model_name">
  615. <parameter name="association_name"/>
  616. <raise event="start_instance" scope="cd">
  617. <parameter expr="association_name"/>
  618. </raise>
  619. <script>
  620. global current_model
  621. self.subwindow = association_name
  622. current_model = ""
  623. </script>
  624. </transition>
  625. </state>
  626. <state id="waiting_for_model_name">
  627. <transition event="prompt_results" target=".">
  628. <parameter name="results"/>
  629. <script>
  630. global current_model
  631. current_model = results["Model name"]
  632. </script>
  633. </transition>
  634. <transition event="close_window" cond="current_model != ''" target="../creating_model">
  635. <raise event="delete_instance" scope="cd">
  636. <parameter expr="self.subwindow"/>
  637. </raise>
  638. </transition>
  639. <transition event="close_window" cond="current_model == ''" target="../../idle">
  640. <raise event="delete_instance" scope="cd">
  641. <parameter expr="self.subwindow"/>
  642. </raise>
  643. </transition>
  644. </state>
  645. <state id="creating_model">
  646. <onentry>
  647. <raise event="mv_request" scope="broad">
  648. <parameter expr="'model_add'"/>
  649. <parameter expr="[current_model, current_metamodel, '']"/>
  650. </raise>
  651. <raise event="update_status" scope="narrow" target="'progress_bar'">
  652. <parameter expr="25"/>
  653. <parameter expr="'Creating empty model...'"/>
  654. </raise>
  655. </onentry>
  656. <transition event="mv_response" target="../../open_model/search_metamodels">
  657. <raise event="update_status" scope="narrow" target="'progress_bar'">
  658. <parameter expr="50"/>
  659. <parameter expr="'Creating empty model... OK'"/>
  660. </raise>
  661. </transition>
  662. </state>
  663. </state>
  664. <state id="rerender_model" initial="initial_render">
  665. <state id="initial_render">
  666. <transition cond="self.model_loaded" target="../recreate_toolbars"/>
  667. <transition cond="not self.model_loaded" target="../canvas">
  668. <script>
  669. self.model_loaded = True
  670. </script>
  671. </transition>
  672. </state>
  673. <state id="recreate_toolbars" initial="waiting">
  674. <onentry>
  675. <raise event="close" scope="narrow" target="'model_toolbars'"/>
  676. <script>
  677. self.nr_toolbars = 3
  678. </script>
  679. </onentry>
  680. <state id="waiting">
  681. <transition event="close_window" target=".">
  682. <script>
  683. self.nr_toolbars -= 1
  684. </script>
  685. </transition>
  686. <transition cond="self.nr_toolbars == 0" target="../close_all"/>
  687. </state>
  688. <state id="close_all">
  689. <transition target="../../model_toolbars">
  690. <raise event="delete_instance" scope="cd">
  691. <parameter expr="'model_toolbars'"/>
  692. </raise>
  693. </transition>
  694. </state>
  695. </state>
  696. <state id="canvas">
  697. <onentry>
  698. <raise event="create_instance" scope="cd">
  699. <parameter expr="'canvas'"/>
  700. <parameter expr="'Canvas'"/>
  701. <parameter expr="self.canvas_frame"/>
  702. </raise>
  703. </onentry>
  704. <transition event="instance_created" target="../pack_canvas">
  705. <parameter name="association_name"/>
  706. <raise event="start_instance" scope="cd">
  707. <parameter expr="association_name"/>
  708. </raise>
  709. </transition>
  710. </state>
  711. <state id="pack_canvas">
  712. <transition event="tk_widget" target="../model_toolbars">
  713. <parameter name="tk_elem"/>
  714. <script>
  715. tk_elem.pack(fill=tk.BOTH, expand=tk.TRUE)
  716. </script>
  717. </transition>
  718. </state>
  719. <state id="model_toolbars" initial="mm_toolbar">
  720. <state id="mm_toolbar">
  721. <onentry>
  722. <raise event="create_instance" scope="cd">
  723. <parameter expr="'model_toolbars'"/>
  724. <parameter expr="'MetamodellingToolbar'"/>
  725. <parameter expr="self.toolbar_frame"/>
  726. <parameter expr="current_metamodel"/>
  727. <parameter expr="self.allowed_metamodels"/>
  728. </raise>
  729. </onentry>
  730. <transition event="instance_created" target="../pack_mm_toolbar">
  731. <parameter name="association_name"/>
  732. <raise event="start_instance" scope="cd">
  733. <parameter expr="association_name"/>
  734. </raise>
  735. </transition>
  736. </state>
  737. <state id="pack_mm_toolbar">
  738. <transition event="tk_widget" target="../cs_toolbar">
  739. <parameter name="tk_elem"/>
  740. <script>
  741. tk_elem.pack(anchor=tk.W)
  742. </script>
  743. </transition>
  744. </state>
  745. <state id="cs_toolbar">
  746. <onentry>
  747. <raise event="create_instance" scope="cd">
  748. <parameter expr="'model_toolbars'"/>
  749. <parameter expr="'ConcreteSyntaxToolbar'"/>
  750. <parameter expr="self.toolbar_frame"/>
  751. <parameter expr="self.allowed_mappers"/>
  752. <parameter expr="self.allowed_rendered"/>
  753. </raise>
  754. </onentry>
  755. <transition event="instance_created" target="../pack_cs_toolbar">
  756. <parameter name="association_name"/>
  757. <raise event="start_instance" scope="cd">
  758. <parameter expr="association_name"/>
  759. </raise>
  760. </transition>
  761. </state>
  762. <state id="pack_cs_toolbar">
  763. <transition event="tk_widget" target="../fetch_types">
  764. <parameter name="tk_elem"/>
  765. <script>
  766. tk_elem.pack(anchor=tk.W)
  767. </script>
  768. </transition>
  769. </state>
  770. <state id="fetch_types">
  771. <onentry>
  772. <raise event="mv_request" scope="broad">
  773. <parameter expr="'types'"/>
  774. <parameter expr="[current_model]"/>
  775. </raise>
  776. </onentry>
  777. <transition event="mv_response" target="../dsl_toolbar">
  778. <parameter name="result"/>
  779. <raise event="create_instance" scope="cd">
  780. <parameter expr="'model_toolbars'"/>
  781. <parameter expr="'DSLToolbar'"/>
  782. <parameter expr="self.toolbar_frame"/>
  783. <parameter expr="result"/>
  784. </raise>
  785. </transition>
  786. </state>
  787. <state id="dsl_toolbar">
  788. <transition event="instance_created" target="../pack_dsl_toolbar">
  789. <parameter name="association_name"/>
  790. <raise event="start_instance" scope="cd">
  791. <parameter expr="association_name"/>
  792. </raise>
  793. </transition>
  794. </state>
  795. <state id="pack_dsl_toolbar">
  796. <transition event="tk_widget" cond="current_mapper is None" target="../../../idle">
  797. <parameter name="tk_elem"/>
  798. <script>
  799. tk_elem.pack(anchor=tk.W)
  800. </script>
  801. </transition>
  802. <transition event="tk_widget" cond="current_mapper is not None" target="../../request_render">
  803. <parameter name="tk_elem"/>
  804. <script>
  805. tk_elem.pack(anchor=tk.W)
  806. </script>
  807. </transition>
  808. </state>
  809. </state>
  810. <state id="request_render">
  811. <onentry>
  812. <raise event="mv_request" scope="broad">
  813. <parameter expr="'model_render'"/>
  814. <parameter expr="[current_model, current_mapper, current_rendered_model]"/>
  815. </raise>
  816. <raise event="update_status" scope="narrow" target="'progress_bar'">
  817. <parameter expr="50"/>
  818. <parameter expr="'Perceptualizing model...'"/>
  819. </raise>
  820. </onentry>
  821. <transition event="mv_response" target="../render_model">
  822. <parameter name="result"/>
  823. <script>
  824. self.rendered = result
  825. </script>
  826. </transition>
  827. <transition event="mv_exception" target="../../../close"/>
  828. </state>
  829. <state id="render_model" initial="allocate_groups">
  830. <onentry>
  831. <raise event="update_status" scope="narrow" target="'progress_bar'">
  832. <parameter expr="80"/>
  833. <parameter expr="'Perceptualizing model... OK'"/>
  834. </raise>
  835. <raise event="clear_canvas" scope="narrow" target="'canvas'"/>
  836. <script>
  837. self.groups = [i for i in self.rendered if i["type"] == "Group"]
  838. self.contains = [i for i in self.rendered if i["type"] == "contains"]
  839. self.rendered = [i for i in self.rendered if i["type"] not in ["Group", "contains"]]
  840. self.rendered.reverse()
  841. </script>
  842. <raise event="mv_request" scope="broad">
  843. <parameter expr="'alter_context'"/>
  844. <parameter expr="[current_rendered_model, 'formalisms/MM_render']"/>
  845. </raise>
  846. </onentry>
  847. <state id="allocate_groups">
  848. <transition cond="len(self.groups) > 0" target="../allocating_group">
  849. <raise event="define_group" scope="narrow" target="'canvas'">
  850. <parameter expr="self.groups.pop()"/>
  851. </raise>
  852. </transition>
  853. <transition cond="len(self.groups) == 0" target="../allocate_contains"/>
  854. </state>
  855. <state id="allocating_group">
  856. <transition event="group_ready" target="../allocate_groups"/>
  857. </state>
  858. <state id="allocate_contains">
  859. <transition cond="len(self.contains) > 0" target=".">
  860. <raise event="define_contains" scope="narrow" target="'canvas'">
  861. <parameter expr="self.contains.pop()"/>
  862. </raise>
  863. </transition>
  864. <transition cond="len(self.contains) == 0" target="../render_elements"/>
  865. </state>
  866. <state id="render_elements">
  867. <transition cond="len(self.rendered) > 0" target=".">
  868. <raise event="draw_canvas" scope="narrow" target="'canvas'">
  869. <parameter expr="self.rendered.pop()"/>
  870. </raise>
  871. </transition>
  872. <transition cond="len(self.rendered) == 0" target="../../../idle"/>
  873. </state>
  874. </state>
  875. </state>
  876. <transition event="window-close" cond="ID == id(self)" target="../close">
  877. <parameter name="ID"/>
  878. </transition>
  879. </state>
  880. <state id="close">
  881. <onentry>
  882. <raise event="close_window" scope="narrow" target="'parent'"/>
  883. </onentry>
  884. </state>
  885. </state>
  886. <state id="key_status">
  887. <onentry>
  888. <script>
  889. global control_pressed
  890. control_pressed = False
  891. </script>
  892. </onentry>
  893. <state id="listening">
  894. <transition event="control" target=".">
  895. <script>
  896. global control_pressed
  897. control_pressed = True
  898. </script>
  899. </transition>
  900. <transition event="control-release" target=".">
  901. <script>
  902. global control_pressed
  903. control_pressed = False
  904. </script>
  905. </transition>
  906. </state>
  907. </state>
  908. </parallel>
  909. </scxml>
  910. </class>