main_window.xml 57 KB

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