tecscde 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rubocop.yml +125 -0
  4. data/.rubocop_todo.yml +188 -0
  5. data/CHANGELOG.md +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +46 -0
  8. data/LICENSE.ja +32 -0
  9. data/README.ja.md +200 -0
  10. data/README.md +35 -0
  11. data/Rakefile +27 -0
  12. data/bin/tecscde +64 -0
  13. data/glade/tecscde-cell-property.glade +205 -0
  14. data/glade/tecscde-celltype-property.glade +172 -0
  15. data/glade/tecscde-celltype.glade +414 -0
  16. data/glade/tecscde-export.glade +161 -0
  17. data/glade/test-cell-plugin.rb +51 -0
  18. data/glade/test-cell-property.rb +35 -0
  19. data/glade/test-export.rb +35 -0
  20. data/glade/test-palette.rb +26 -0
  21. data/lib/tcflow.rb +148 -0
  22. data/lib/tecscde.rb +65 -0
  23. data/lib/tecscde/NewCell.png +0 -0
  24. data/lib/tecscde/SelectArrow.png +0 -0
  25. data/lib/tecscde/attr_tree_view.rb +253 -0
  26. data/lib/tecscde/cell_plugin_dialog.glade +294 -0
  27. data/lib/tecscde/cell_plugin_dialog.rb +89 -0
  28. data/lib/tecscde/celltype_tree_view.rb +105 -0
  29. data/lib/tecscde/change_set_control.rb +35 -0
  30. data/lib/tecscde/change_set_control/change_set.rb +32 -0
  31. data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
  32. data/lib/tecscde/command.rb +35 -0
  33. data/lib/tecscde/control.rb +491 -0
  34. data/lib/tecscde/highlighted_objects.rb +180 -0
  35. data/lib/tecscde/logger.rb +74 -0
  36. data/lib/tecscde/main_view_and_model.rb +80 -0
  37. data/lib/tecscde/palette.glade +553 -0
  38. data/lib/tecscde/palette.rb +174 -0
  39. data/lib/tecscde/preferences.glade +117 -0
  40. data/lib/tecscde/preferences.rb +44 -0
  41. data/lib/tecscde/tecs_model.rb +1137 -0
  42. data/lib/tecscde/tecs_model/hbar.rb +68 -0
  43. data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
  44. data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
  45. data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
  46. data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
  47. data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
  48. data/lib/tecscde/tecs_model/tm_join.rb +293 -0
  49. data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
  50. data/lib/tecscde/tecs_model/tm_port.rb +238 -0
  51. data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
  52. data/lib/tecscde/tecs_model/tm_region.rb +107 -0
  53. data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
  54. data/lib/tecscde/tecs_model/vbar.rb +68 -0
  55. data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
  56. data/lib/tecscde/templates/_join_info.cde.erb +28 -0
  57. data/lib/tecscde/templates/main.cde.erb +49 -0
  58. data/lib/tecscde/tm_object.rb +91 -0
  59. data/lib/tecscde/version.rb +4 -0
  60. data/lib/tecscde/view.rb +58 -0
  61. data/lib/tecscde/view/cairo_matrix.rb +90 -0
  62. data/lib/tecscde/view/canvas.rb +59 -0
  63. data/lib/tecscde/view/constants.rb +114 -0
  64. data/lib/tecscde/view/main_view.rb +1245 -0
  65. data/lib/tecsflow.rb +475 -0
  66. data/lib/tecsflow/C_parser.tab.rb +2471 -0
  67. data/lib/tecsflow/C_parser.y.rb +1087 -0
  68. data/lib/tecsflow/classes.rb +421 -0
  69. data/lib/tecsgen.rb +581 -0
  70. data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
  71. data/lib/tecsgen/core/C_parser.y +1032 -0
  72. data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
  73. data/lib/tecsgen/core/bnf.tab.rb +5193 -0
  74. data/lib/tecsgen/core/bnf.y +2211 -0
  75. data/lib/tecsgen/core/componentobj.rb +7901 -0
  76. data/lib/tecsgen/core/ctypes.rb +226 -0
  77. data/lib/tecsgen/core/expression.rb +1031 -0
  78. data/lib/tecsgen/core/gen_xml.rb +374 -0
  79. data/lib/tecsgen/core/generate.rb +5206 -0
  80. data/lib/tecsgen/core/location.rb +116 -0
  81. data/lib/tecsgen/core/messages.rb +101 -0
  82. data/lib/tecsgen/core/optimize.rb +456 -0
  83. data/lib/tecsgen/core/plugin.rb +332 -0
  84. data/lib/tecsgen/core/pluginModule.rb +165 -0
  85. data/lib/tecsgen/core/syntaxobj.rb +1234 -0
  86. data/lib/tecsgen/core/tecs_lang.rb +306 -0
  87. data/lib/tecsgen/core/tecsgen.rb +453 -0
  88. data/lib/tecsgen/core/tecsinfo.rb +860 -0
  89. data/lib/tecsgen/core/tool_info.rb +258 -0
  90. data/lib/tecsgen/core/types.rb +1632 -0
  91. data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
  92. data/lib/tecsgen/core/value.rb +650 -0
  93. data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
  94. data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
  95. data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
  96. data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
  97. data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
  98. data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
  99. data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
  100. data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
  101. data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
  102. data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
  103. data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
  104. data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
  105. data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
  106. data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
  107. data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
  108. data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
  109. data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
  110. data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
  111. data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
  112. data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
  113. data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
  114. data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
  115. data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
  116. data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
  117. data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
  118. data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
  119. data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
  120. data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
  121. data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
  122. data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
  123. data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
  124. data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
  125. data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
  126. data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
  127. data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
  128. data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
  129. data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
  130. data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
  131. data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
  132. data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
  133. data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
  134. data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
  135. data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
  136. data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
  137. data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
  138. data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
  139. data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
  140. data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
  141. data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
  142. data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
  143. data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
  144. data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
  145. data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
  146. data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
  147. data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
  148. data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
  149. data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
  150. data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
  151. data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
  152. data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
  153. data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
  154. data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
  155. data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
  156. data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
  157. data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
  158. data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
  159. data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
  160. data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
  161. data/lib/tecsgen/version.rb +6 -0
  162. data/samples/FigureSamples/active/active.cde +104 -0
  163. data/samples/FigureSamples/active/active.cdl +20 -0
  164. data/samples/FigureSamples/active/active.pdf +0 -0
  165. data/samples/FigureSamples/active/active.png +0 -0
  166. data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
  167. data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
  168. data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
  169. data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
  170. data/samples/FigureSamples/allocator/allocator.cde +171 -0
  171. data/samples/FigureSamples/allocator/allocator.cdl +58 -0
  172. data/samples/FigureSamples/allocator/allocator.png +0 -0
  173. data/samples/FigureSamples/basic/Makefile +87 -0
  174. data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
  175. data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
  176. data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
  177. data/samples/FigureSamples/basic/basic.cde +93 -0
  178. data/samples/FigureSamples/basic/basic.cdl +46 -0
  179. data/samples/FigureSamples/basic/basic.png +0 -0
  180. data/samples/FigureSamples/callback/callback.cde +130 -0
  181. data/samples/FigureSamples/callback/callback.cdl +29 -0
  182. data/samples/FigureSamples/callback/callback.png +0 -0
  183. data/samples/FigureSamples/carray/carray.cde +144 -0
  184. data/samples/FigureSamples/carray/carray.cdl +38 -0
  185. data/samples/FigureSamples/carray/carray.png +0 -0
  186. data/samples/FigureSamples/cearray/cearray.cde +314 -0
  187. data/samples/FigureSamples/cearray/cearray.cdl +60 -0
  188. data/samples/FigureSamples/cearray/cearray.png +0 -0
  189. data/samples/FigureSamples/composite/composite-internal.png +0 -0
  190. data/samples/FigureSamples/composite/composite.cde +216 -0
  191. data/samples/FigureSamples/composite/composite.cdl +95 -0
  192. data/samples/FigureSamples/composite/composite.png +0 -0
  193. data/samples/FigureSamples/earray/earray.cde +142 -0
  194. data/samples/FigureSamples/earray/earray.cdl +38 -0
  195. data/samples/FigureSamples/earray/earray.png +0 -0
  196. data/samples/FigureSamples/join/Makefile +87 -0
  197. data/samples/FigureSamples/join/join.cde +132 -0
  198. data/samples/FigureSamples/join/join.cdl +40 -0
  199. data/samples/FigureSamples/join/join.png +0 -0
  200. data/samples/FigureSamples/relay/Makefile +99 -0
  201. data/samples/FigureSamples/relay/relay-internal.png +0 -0
  202. data/samples/FigureSamples/relay/relay.cde +284 -0
  203. data/samples/FigureSamples/relay/relay.cdl +52 -0
  204. data/samples/FigureSamples/relay/relay.png +0 -0
  205. data/samples/FigureSamples/rpc/Makefile +123 -0
  206. data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
  207. data/samples/FigureSamples/rpc/rpc.cde +245 -0
  208. data/samples/FigureSamples/rpc/rpc.png +0 -0
  209. data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
  210. data/samples/SimpleSample/Makefile +25 -0
  211. data/samples/SimpleSample/SimpleSample/Makefile +86 -0
  212. data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
  213. data/samples/SimpleSample/SimpleSample/README.txt +106 -0
  214. data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
  215. data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
  216. data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
  217. data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
  218. data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
  219. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
  220. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
  221. data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
  222. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
  223. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
  224. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
  225. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
  226. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
  227. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
  228. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
  229. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
  230. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
  231. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
  232. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
  233. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
  234. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
  235. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
  236. data/tecscde.gemspec +41 -0
  237. metadata +353 -0
@@ -0,0 +1,35 @@
1
+ module TECSCDE
2
+ #==ChangeSetControl: provide methods for controling ChangeSet
3
+ module ChangeSetControl
4
+ #----- ChangeSetControl methods -----#
5
+ def init_change_set
6
+ @change_set_manager = TECSCDE::ChangeSetControl::ChangeSetManager.new
7
+ end
8
+
9
+ #=== ChangeSetControl#add_change_set
10
+ # at the time modifying tm_object, record only the changed tm_object
11
+ def add_change_set(tm_object)
12
+ # TECSCDE.logger.info("add_change_set #{tm_object.class} change_set=#{@change_no}")
13
+ @change_set_manager.add_change_set(tm_object)
14
+ end
15
+
16
+ def set_undo_point
17
+ @change_set_manager.set_undo_point
18
+ end
19
+
20
+ def undo
21
+ @change_set_manager.undo
22
+ end
23
+
24
+ def redo
25
+ @change_set_manager.redo
26
+ end
27
+
28
+ def modified?
29
+ @change_set_manager.modified?
30
+ end
31
+ end
32
+ end
33
+
34
+ require "tecscde/change_set_control/change_set"
35
+ require "tecscde/change_set_control/change_set_manager"
@@ -0,0 +1,32 @@
1
+ module TECSCDE
2
+ module ChangeSetControl
3
+ #== ChangeSet class
4
+ # record each change (change by user's operation)
5
+ class ChangeSet
6
+ def initialize(number)
7
+ @set = {}
8
+ @number = number
9
+ end
10
+
11
+ def add(tm_object)
12
+ return if @set.key?(tm_object)
13
+ # TECSCDE.logger.info("add_change_set #{tm_object.class} number=#{@number}")
14
+ @set[tm_object] = tm_object.clone_for_undo
15
+ end
16
+
17
+ def set_undo_point
18
+ count = @set.length
19
+ TECSCDE.logger.info("* set_undo_point number=#{@number}, count=#{count}")
20
+ count
21
+ end
22
+
23
+ def apply
24
+ TECSCDE.logger.debug("applying change_no=#{@number}")
25
+ @set.each_key do |tm_object|
26
+ tm_object.copy_from(@set[tm_object])
27
+ TECSCDE.logger.debug("apply #{tm_object.class}")
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,62 @@
1
+ module TECSCDE
2
+ module ChangeSetControl
3
+ #== ChangeSetMangager class
4
+ # contain all changes & execute undo
5
+ class ChangeSetManager
6
+ def initialize
7
+ @change_no = 0
8
+ @change_set_list = []
9
+ @change_set_next = ChangeSet.new(@change_no)
10
+ end
11
+
12
+ #=== ChangeSetManager#add_change_set
13
+ # at the time modifying tm_object, record only the changed tm_object
14
+ def add_change_set(tm_object)
15
+ # TECSCDE.logger.info("add_change_set #{tm_object.class} change_set=#{@change_no}")
16
+ @change_set_next.add(tm_object)
17
+ end
18
+
19
+ def set_undo_point
20
+ count = @change_set_next.set_undo_point
21
+ if count > 0
22
+ # TECSCDE.logger.info("* set_undo_point change_no=#{@change_no}, count=#{count}")
23
+ # p "* set_undo_point change_no=#{@change_no}, count=#{count}\n"
24
+ @change_set_list[@change_no] = @change_set_next
25
+ @change_no += 1
26
+ @change_set_next = ChangeSet.new(@change_no)
27
+
28
+ if @change_set_list.length > @change_no
29
+ TECSCDE.logger.info("truncate undo buffer #{@change_set_list.length} to #{@change_no}")
30
+ # print( "range: #{(@change_no)..(@change_set_list.length)-1}\n" )
31
+ # p "length0=#{@change_set_list.length}"
32
+ @change_set_list.slice!(@change_no..(@change_set_list.length - 1))
33
+ # p "length1=#{@change_set_list.length}"
34
+ end
35
+ else
36
+ TECSCDE.logger.info("* set_undo_point: nothing changed")
37
+ end
38
+ end
39
+
40
+ # assumed undo is done just after set_undo_point (this means @change_set_next has no contents)
41
+ def undo
42
+ return unless modified?
43
+ @change_no -= 1
44
+ TECSCDE.logger.info("* undo change_no=#{@change_no}")
45
+ @change_set_list[@change_no].apply
46
+ # TECSCDE.logger.info("* undo1 change_no=#{@change_no}")
47
+ @change_set_next = ChangeSet.new(@change_no)
48
+ end
49
+
50
+ def redo
51
+ return if @change_set_list.length <= @change_no + 1
52
+ @change_no += 1
53
+ TECSCDE.logger.info("* redo change_no=#{@change_no}")
54
+ @change_set_list[@change_no].apply
55
+ end
56
+
57
+ def modified?
58
+ @change_no > 1
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,35 @@
1
+ $TECSCDE = true
2
+ require "tecsgen"
3
+ require "tecscde/logger"
4
+
5
+ module TECSCDE
6
+ class Command
7
+ def initialize
8
+ end
9
+
10
+ def run(argv)
11
+ $b_tate = true # Bool: true if vertical style
12
+ $b_force_apply_tool_info = false # Bool: force to apply tool_info
13
+
14
+ additional_option_parser = proc do |parser|
15
+ parser.on("--base_dir=dir", "base directory (tecscde only)") do |dir|
16
+ $base_dir[dir] = true
17
+ end
18
+ parser.on("--force-apply-tool_info", "force to apply tool_info, even if validation failed. this might cause ruby exception and stop tecscde") do
19
+ $b_force_apply_tool_info = true
20
+ end
21
+ parser.on("--tate", "vertical (tate) style (tecscde only)") do
22
+ $b_tate = true
23
+ end
24
+ parser.on("--yoko", "horizontal (yoko) style (tecscde only)") do
25
+ $b_tate = false
26
+ end
27
+ end
28
+
29
+ TECSGEN.init(additional_option_parser)
30
+ tecsgen = TECSGEN.new
31
+ tecsgen.run1
32
+ TECSCDE.main(tecsgen)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,491 @@
1
+ #
2
+ # TECSCDE - TECS Component Diagram Editor
3
+ #
4
+ # Copyright (C) 2014-2019 by TOPPERS Project
5
+ #
6
+ # The above copyright holders grant permission gratis to use,
7
+ # duplicate, modify, or redistribute (hereafter called use) this
8
+ # software (including the one made by modifying this software),
9
+ # provided that the following four conditions (1) through (4) are
10
+ # satisfied.
11
+ #
12
+ # (1) When this software is used in the form of source code, the above
13
+ # copyright notice, this use conditions, and the disclaimer shown
14
+ # below must be retained in the source code without modification.
15
+ #
16
+ # (2) When this software is redistributed in the forms usable for the
17
+ # development of other software, such as in library form, the above
18
+ # copyright notice, this use conditions, and the disclaimer shown
19
+ # below must be shown without modification in the document provided
20
+ # with the redistributed software, such as the user manual.
21
+ #
22
+ # (3) When this software is redistributed in the forms unusable for the
23
+ # development of other software, such as the case when the software
24
+ # is embedded in a piece of equipment, either of the following two
25
+ # conditions must be satisfied:
26
+ #
27
+ # (a) The above copyright notice, this use conditions, and the
28
+ # disclaimer shown below must be shown without modification in
29
+ # the document provided with the redistributed software, such as
30
+ # the user manual.
31
+ #
32
+ # (b) How the software is to be redistributed must be reported to the
33
+ # TOPPERS Project according to the procedure described
34
+ # separately.
35
+ #
36
+ # (4) The above copyright holders and the TOPPERS Project are exempt
37
+ # from responsibility for any type of damage directly or indirectly
38
+ # caused from the use of this software and are indemnified by any
39
+ # users or end users of this software from any and all causes of
40
+ # action whatsoever.
41
+ #
42
+ # THIS SOFTWARE IS PROVIDED "AS IS." THE ABOVE COPYRIGHT HOLDERS AND
43
+ # THE TOPPERS PROJECT DISCLAIM ANY EXPRESS OR IMPLIED WARRANTIES,
44
+ # INCLUDING, BUT NOT LIMITED TO, ITS APPLICABILITY TO A PARTICULAR
45
+ # PURPOSE. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS AND THE
46
+ # TOPPERS PROJECT BE LIABLE FOR ANY TYPE OF DAMAGE DIRECTLY OR
47
+ # INDIRECTLY CAUSED FROM THE USE OF THIS SOFTWARE.
48
+ #
49
+
50
+ require "tecscde/highlighted_objects"
51
+ require "tecscde/palette"
52
+
53
+ module TECSCDE
54
+ #
55
+ # Structure of Palette Window
56
+ #
57
+ # +-- @window -----------------------------+
58
+ # |+-- @box ------------------------------+|
59
+ # ||+- mode (@mode_frame) ---------------+||
60
+ # |||+-@mode_vbox-----------------------+|||
61
+ # |||| Pointer (@pointer_button) ||||
62
+ # |||+----------------------------------+|||
63
+ # |||| New Cell (@new_button) ||||
64
+ # |||+----------------------------------+|||
65
+ # ||+- celltypes (@celltype_frame)-------+||
66
+ # |||+- ClltypeTreeView&ScrolledWindow--+|||
67
+ # |||| name | region ||||
68
+ # |||+---------+------------------------+|||
69
+ # |||| | ||||
70
+ # |||| | ||||
71
+ # |||+---------+------------------------+|||
72
+ # ||+- cell properties (@mode_celltype) -+||
73
+ # |||+- AttrTreeView&ScrolledWindow-----+|||
74
+ # |||| name | type | value ||||
75
+ # |||+---------+---------+--------------+|||
76
+ # |||| | | ||||
77
+ # |||| | | ||||
78
+ # |||+---------+---------+--------------+|||
79
+ # |+--------------------------------------+|
80
+ # +----------------------------------------+
81
+ #
82
+
83
+ UNSELECTED_STR = "(unselected)"
84
+
85
+ class Control
86
+ # @window:: Gtk::Window
87
+ # @model::Model
88
+ # @view::View
89
+ # @mode::Symbol: :NEW_CELL, :POINTER
90
+ # @cport_joining::TmCPort # :SM_JOINING starting cell
91
+ # @celltype_tree_view::CelltypeTreeView
92
+ # @attr_tree_view::AttrTreeView
93
+ # @prev_time::Integer: event time (milli second)
94
+
95
+ MODE_LIST = [:MODE_NONE, :MODE_NEW_CELL, :MODE_POINTER]
96
+ SUBMODE_LIST = [
97
+ :SM_NONE,
98
+ :SM_JOINING,
99
+ :SM_SURROUNDING_CELLS,
100
+ :SM_MOVING_CELL_BAR,
101
+ :SM_MOVING_CPORT,
102
+ :SM_MOVING_EPORT,
103
+ :SM_MOVING_CELL_EDGE,
104
+ :SM_EDIT_CELL_NAME
105
+ ]
106
+
107
+ attr_reader :highlighted_objects
108
+
109
+ def initialize(model)
110
+ @nest = -1
111
+ @model = model
112
+ @highlighted_objects = TECSCDE::HighlightedObjects.new
113
+ @mode = :MODE_NONE
114
+ @sub_mode = :SM_NONE
115
+ @cport_joining = nil
116
+ @prev_time = 0
117
+
118
+ create_new_operation_window
119
+ add_celltype_list
120
+
121
+ @highlighted_objects.set_attr_tree_view(@attr_tree_view, @cell_name_entry, @cell_region_entry, @cell_frame)
122
+ @highlighted_objects.update_attr_tree_view
123
+
124
+ @last_xm = @last_ym = 0
125
+ end
126
+
127
+ #----- operations for palette -----#
128
+ def on_save
129
+ TECSCDE.logger.info("save")
130
+ @model.save(@model.file_editing)
131
+ end
132
+
133
+ def on_export
134
+ fname = @model.file_editing.sub(/\.[Cc][Dd][Ee]\Z/, ".pdf")
135
+ if !(fname =~ /\.pdf\Z/)
136
+ fname += ".pdf"
137
+ end
138
+ TECSCDE.logger.info("export to #{fname}")
139
+ @view.export(fname)
140
+ end
141
+
142
+ def on_pointer
143
+ TECSCDE.logger.info("mode: pointer")
144
+ @mode = :MODE_POINTER
145
+ end
146
+
147
+ def on_new_cell
148
+ @mode = :MODE_NEW_CELL
149
+ TECSCDE.logger.info("mode: new")
150
+ end
151
+
152
+ def on_undo
153
+ @model.undo
154
+ @highlighted_objects.reset
155
+ update
156
+ end
157
+
158
+ def on_redo
159
+ @model.redo
160
+ @highlighted_objects.reset
161
+ update
162
+ end
163
+
164
+ def on_quit
165
+ TECSCDE.quit(@model)
166
+ end
167
+
168
+ def on_cell_name_entry_active(entry)
169
+ @b_cell_renaming = true
170
+ @highlighted_objects.change_cell_name(entry.text)
171
+ @b_cell_renaming = false
172
+ update
173
+ end
174
+
175
+ def on_cell_name_entry_focus_out(entry)
176
+ return if @b_cell_renaming
177
+ # to avoid nested message box dialog in error case
178
+ @highlighted_objects.change_cell_name(entry.text)
179
+ update
180
+ end
181
+
182
+ def on_cell_region_entry_active(entry)
183
+ # @b_cell_renaming = true
184
+ # @highlighted_objects.change_cell_name entry.text
185
+ # @b_cell_renaming = false
186
+ # update
187
+ end
188
+
189
+ def on_cell_region_entry_focus_out(entry)
190
+ # to avoid nested message box dialog in error case
191
+ # if ! @b_cell_renaming
192
+ # @highlighted_objects.change_cell_name entry.text
193
+ # update
194
+ # end
195
+ end
196
+
197
+ def set_attr_operation_widgets(window, celltype_tree_view, attr_tree_view, cell_name_entry, cell_region_entry, cell_frame)
198
+ @window = window
199
+ @celltype_tree_view = celltype_tree_view
200
+ @attr_tree_view = attr_tree_view
201
+ @cell_name_entry = cell_name_entry
202
+ @cell_region_entry = cell_region_entry
203
+ @cell_frame = cell_frame
204
+ @highlighted_objects.set_attr_tree_view(@attr_tree_view, @cell_name_entry, @cell_region_etnry, @cell_frame)
205
+ end
206
+
207
+ def preferences
208
+ {
209
+ paper: @model.paper
210
+ }
211
+ end
212
+
213
+ def change_preferences(paper: nil)
214
+ @model.paper = paper.to_sym
215
+ end
216
+
217
+ #----- palette -----#
218
+ def create_new_operation_window
219
+ @palette = TECSCDE::Palette.new(self)
220
+ # @palette.get_entry_cell_name
221
+ # @palette.get_attrTreeView
222
+ end
223
+
224
+ #----- end of palette operations -----#
225
+
226
+ def set_view(view)
227
+ @view = view
228
+ @attr_tree_view.set_view(view)
229
+
230
+ # keep controlWindow above mainWindow
231
+ @window.set_transient_for(@view.get_window)
232
+ @window.window.set_group(@view.get_window.window)
233
+ @window.window.raise
234
+
235
+ @palette.set_view(view)
236
+ end
237
+
238
+ #----- canvas events action -----#
239
+
240
+ #=== mouse pressed on canvas
241
+ # button::Integer: mouse button number
242
+ # state::GdkModifierType: modifier key state
243
+ # time::Integer: milli second
244
+ # click_count::Integer: 1=single click, 2=double click
245
+ def pressed_on_canvas(xm, ym, state, button, time, click_count)
246
+ # p "button=#{button} state=#{state} time=#{time} sub_mode=#{@sub_mode}"
247
+ if @sub_mode == :SM_EDIT_CELL_NAME
248
+ name = @view.end_edit_name
249
+ # p "end_edit_name name=#{name}"
250
+ @highlighted_objects.change_cell_name(name)
251
+ @sub_mode = :SM_NONE
252
+ end
253
+
254
+ @prev_time = time
255
+
256
+ return unless button == 1
257
+
258
+ object = find_near(xm, ym)
259
+ if object.is_a?(TECSModel::TmCell) && click_count == 2
260
+ if object.editable?
261
+ # p "begin_edit_name"
262
+ @view.begin_edit_name(object, time)
263
+ @highlighted_objects.reset(object)
264
+ @sub_mode = :SM_EDIT_CELL_NAME
265
+ end
266
+ elsif object.is_a?(TECSModel::TmCell) || object.is_a?(TECSModel::TmJoinBar)
267
+ @sub_mode = :SM_MOVING_CELL_BAR
268
+ # p "FOUND Cell or Bar"
269
+ if state.shift_mask?
270
+ @highlighted_objects.add(object)
271
+ elsif state.control_mask?
272
+ @highlighted_objects.add_del(object)
273
+ elsif !@highlighted_objects.include?(object)
274
+ @highlighted_objects.reset(object)
275
+ end
276
+ @view.draw_highlight_objects(@highlighted_objects)
277
+ elsif object.is_a?(TECSModel::TmCPort)
278
+ # p "FOUND TmCPort"
279
+ if state.shift_mask?
280
+ @sub_mode = :SM_MOVING_CPORT
281
+ @highlighted_objects.add(object)
282
+ elsif state.control_mask?
283
+ @sub_mode = :SM_MOVING_CPORT
284
+ @highlighted_objects.reset(object)
285
+ elsif object.get_join.nil?
286
+ @sub_mode = :SM_JOINING
287
+ @highlighted_objects.reset
288
+ @cport_joining = object
289
+ @view.set_cursor(TECSCDE::CURSOR_JOINING)
290
+ else
291
+ TECSCDE.message_box(<<~MESSAGE, :OK)
292
+ Call port has already been joined.
293
+ Delete existing join before creating new join.
294
+ If you want to highlighted port, click with pressing shift key.
295
+ MESSAGE
296
+ end
297
+ elsif object.is_a?(TECSModel::TmEPort)
298
+ @sub_mode = :SM_MOVING_EPORT
299
+ if state.shift_mask?
300
+ @highlighted_objects.add(object)
301
+ elsif state.control_mask?
302
+ @highlighted_objects.add_del(object)
303
+ else
304
+ # p "FOUND TmEPort"
305
+ @highlighted_objects.reset(object)
306
+ end
307
+ else
308
+ # p "NOT FOUND"
309
+ if @mode == :MODE_NEW_CELL
310
+ ctn, nsp = @celltype_tree_view.selected
311
+ if ctn
312
+ cell = @model.new_cell(xm, ym, ctn, nsp)
313
+ @model.set_undo_point
314
+ end
315
+ @highlighted_objects.reset(cell)
316
+ else
317
+ @highlighted_objects.reset
318
+ end
319
+ end
320
+ @last_xm = xm
321
+ @last_ym = ym
322
+ end
323
+
324
+ #=== mouse moved on canvas
325
+ def motion_on_canvas(xm, ym, state)
326
+ x_inc = xm - @last_xm
327
+ y_inc = ym - @last_ym
328
+
329
+ q, r = x_inc.divmod(TECSModel.get_alignment)
330
+ x_inc2 = TECSModel.get_alignment * q
331
+ @last_xm = xm - r
332
+
333
+ q, r = y_inc.divmod(TECSModel.get_alignment)
334
+ y_inc2 = TECSModel.get_alignment * q
335
+ @last_ym = ym - r
336
+
337
+ case @sub_mode
338
+ when :SM_MOVING_CELL_BAR
339
+ @highlighted_objects.each do |cell_bar|
340
+ cell_bar.move(x_inc2, y_inc2)
341
+ end
342
+ @view.refresh_canvas
343
+ @view.draw_highlight_objects(@highlighted_objects)
344
+ when :SM_MOVING_CPORT, :SM_MOVING_EPORT
345
+ @highlighted_objects.each do |port|
346
+ port.move(x_inc2, y_inc2)
347
+ end
348
+ update
349
+ @view.refresh_canvas
350
+ @view.draw_highlight_objects(@highlighted_objects)
351
+ when :SM_JOINING
352
+ object = find_near(xm, ym)
353
+ if object.is_a?(TECSModel::TmEPort)
354
+ if object.get_signature == @cport_joining.get_signature
355
+ @view.set_cursor(TECSCDE::CURSOR_JOIN_OK)
356
+ end
357
+ # update
358
+ end
359
+
360
+ when :SM_NONE
361
+ object = find_near(xm, ym)
362
+ if object.is_a?(TECSModel::TmCPort)
363
+ @view.set_cursor(TECSCDE::CURSOR_PORT)
364
+ else
365
+ @view.set_cursor(TECSCDE::CURSOR_NORMAL)
366
+ end
367
+ end
368
+ end
369
+
370
+ #=== mouse released on canvas
371
+ def released_on_canvas(xm, ym, state, button)
372
+ case @sub_mode
373
+ when :SM_MOVING_CELL_BAR
374
+ # update
375
+ @model.set_undo_point
376
+ when :SM_MOVING_CPORT, :SM_MOVING_EPORT
377
+ # update
378
+ @model.set_undo_point
379
+ when :SM_JOINING
380
+ object = find_near(xm, ym)
381
+ if object.is_a?(TECSModel::TmEPort)
382
+ if object.get_signature == @cport_joining.get_signature
383
+ join = @model.new_join(@cport_joining, object)
384
+ @model.set_undo_point
385
+ end
386
+ # update
387
+ end
388
+ end
389
+ @view.set_cursor(TECSCDE::CURSOR_NORMAL)
390
+ return if @sub_mode == :SM_EDIT_CELL_NAME
391
+ update
392
+ @sub_mode = :SM_NONE
393
+ end
394
+
395
+ def key_pressed(keyval, state)
396
+ return if @sub_mode == :SM_EDIT_CELL_NAME
397
+
398
+ case keyval
399
+ when 0xff # delete key
400
+ @highlighted_objects.each do |object|
401
+ if object.is_a?(TECSModel::TmJoinBar)
402
+ object.get_join.delete
403
+ elsif object.is_a?(TECSModel::TmCell)
404
+ object.delete
405
+ elsif object.is_a?(TECSModel::TmPort)
406
+ object.delete_highlighted
407
+ end
408
+ end
409
+ @highlighted_objects.reset
410
+ when 0x63 # Insert
411
+ @highlighted_objects.each do |object|
412
+ if object.is_a?(TECSModel::TmPort)
413
+ object.insert(state.shift_mask? ? :before : :after)
414
+ end
415
+ end
416
+ when 0x51, 0x52, 0x53, 0x54
417
+ case keyval
418
+ when 0x51 # left arrow
419
+ x_inc = - TECSModel.get_alignment
420
+ y_inc = 0
421
+ when 0x52 # up arrow
422
+ x_inc = 0.0
423
+ y_inc = - TECSModel.get_alignment
424
+ when 0x53 # right arrow
425
+ x_inc = TECSModel.get_alignment
426
+ y_inc = 0
427
+ when 0x54 # down arrow
428
+ x_inc = 0.0
429
+ y_inc = TECSModel.get_alignment
430
+ end
431
+ @highlighted_objects.each do |obj|
432
+ obj.move(x_inc, y_inc)
433
+ end
434
+ when 0x50 # home
435
+ when 0x57 # end
436
+ when 0x55 # PageUp
437
+ when 0x56 # PageDown
438
+ else
439
+ message = "key_pressed: keyval=%02x" % [keyval]
440
+ TECSCDE.logger.info(message)
441
+ end
442
+ if @sub_mode != :SM_EDIT_CELL_NAME
443
+ update
444
+ end
445
+ @model.set_undo_point
446
+ end
447
+
448
+ #=== find_near object
449
+ # RETURN::TmCell, TmPort, TmJoin
450
+ def find_near(xm, ym)
451
+ @model.get_cell_list.each do |cell|
452
+ port = cell.get_near_port(xm, ym)
453
+ if port
454
+ # p "found port"
455
+ return port
456
+ end
457
+
458
+ if cell.near?(xm, ym)
459
+ # p "found cell"
460
+ return cell
461
+ end
462
+ end
463
+
464
+ # find nearest bar
465
+ min_dist = 999999999
466
+ min_bar = nil
467
+ @model.get_join_list.each do |join|
468
+ bar, dist = join.get_near_bar(xm, ym)
469
+ if dist < min_dist
470
+ min_dist = dist
471
+ min_bar = bar
472
+ end
473
+ end
474
+ min_bar
475
+ end
476
+
477
+ def add_celltype_list
478
+ ctl = @model.get_celltype_list
479
+ return unless ctl
480
+ ctl.each do |ct|
481
+ @celltype_tree_view.add(ct)
482
+ end
483
+ end
484
+
485
+ # Control#update
486
+ def update
487
+ @highlighted_objects.update_attr_tree_view
488
+ @view.paint_canvas
489
+ end
490
+ end
491
+ end