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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rubocop.yml +125 -0
- data/.rubocop_todo.yml +188 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +6 -0
- data/LICENSE +46 -0
- data/LICENSE.ja +32 -0
- data/README.ja.md +200 -0
- data/README.md +35 -0
- data/Rakefile +27 -0
- data/bin/tecscde +64 -0
- data/glade/tecscde-cell-property.glade +205 -0
- data/glade/tecscde-celltype-property.glade +172 -0
- data/glade/tecscde-celltype.glade +414 -0
- data/glade/tecscde-export.glade +161 -0
- data/glade/test-cell-plugin.rb +51 -0
- data/glade/test-cell-property.rb +35 -0
- data/glade/test-export.rb +35 -0
- data/glade/test-palette.rb +26 -0
- data/lib/tcflow.rb +148 -0
- data/lib/tecscde.rb +65 -0
- data/lib/tecscde/NewCell.png +0 -0
- data/lib/tecscde/SelectArrow.png +0 -0
- data/lib/tecscde/attr_tree_view.rb +253 -0
- data/lib/tecscde/cell_plugin_dialog.glade +294 -0
- data/lib/tecscde/cell_plugin_dialog.rb +89 -0
- data/lib/tecscde/celltype_tree_view.rb +105 -0
- data/lib/tecscde/change_set_control.rb +35 -0
- data/lib/tecscde/change_set_control/change_set.rb +32 -0
- data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
- data/lib/tecscde/command.rb +35 -0
- data/lib/tecscde/control.rb +491 -0
- data/lib/tecscde/highlighted_objects.rb +180 -0
- data/lib/tecscde/logger.rb +74 -0
- data/lib/tecscde/main_view_and_model.rb +80 -0
- data/lib/tecscde/palette.glade +553 -0
- data/lib/tecscde/palette.rb +174 -0
- data/lib/tecscde/preferences.glade +117 -0
- data/lib/tecscde/preferences.rb +44 -0
- data/lib/tecscde/tecs_model.rb +1137 -0
- data/lib/tecscde/tecs_model/hbar.rb +68 -0
- data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
- data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
- data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
- data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
- data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
- data/lib/tecscde/tecs_model/tm_join.rb +293 -0
- data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
- data/lib/tecscde/tecs_model/tm_port.rb +238 -0
- data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
- data/lib/tecscde/tecs_model/tm_region.rb +107 -0
- data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
- data/lib/tecscde/tecs_model/vbar.rb +68 -0
- data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
- data/lib/tecscde/templates/_join_info.cde.erb +28 -0
- data/lib/tecscde/templates/main.cde.erb +49 -0
- data/lib/tecscde/tm_object.rb +91 -0
- data/lib/tecscde/version.rb +4 -0
- data/lib/tecscde/view.rb +58 -0
- data/lib/tecscde/view/cairo_matrix.rb +90 -0
- data/lib/tecscde/view/canvas.rb +59 -0
- data/lib/tecscde/view/constants.rb +114 -0
- data/lib/tecscde/view/main_view.rb +1245 -0
- data/lib/tecsflow.rb +475 -0
- data/lib/tecsflow/C_parser.tab.rb +2471 -0
- data/lib/tecsflow/C_parser.y.rb +1087 -0
- data/lib/tecsflow/classes.rb +421 -0
- data/lib/tecsgen.rb +581 -0
- data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
- data/lib/tecsgen/core/C_parser.y +1032 -0
- data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.y +2211 -0
- data/lib/tecsgen/core/componentobj.rb +7901 -0
- data/lib/tecsgen/core/ctypes.rb +226 -0
- data/lib/tecsgen/core/expression.rb +1031 -0
- data/lib/tecsgen/core/gen_xml.rb +374 -0
- data/lib/tecsgen/core/generate.rb +5206 -0
- data/lib/tecsgen/core/location.rb +116 -0
- data/lib/tecsgen/core/messages.rb +101 -0
- data/lib/tecsgen/core/optimize.rb +456 -0
- data/lib/tecsgen/core/plugin.rb +332 -0
- data/lib/tecsgen/core/pluginModule.rb +165 -0
- data/lib/tecsgen/core/syntaxobj.rb +1234 -0
- data/lib/tecsgen/core/tecs_lang.rb +306 -0
- data/lib/tecsgen/core/tecsgen.rb +453 -0
- data/lib/tecsgen/core/tecsinfo.rb +860 -0
- data/lib/tecsgen/core/tool_info.rb +258 -0
- data/lib/tecsgen/core/types.rb +1632 -0
- data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
- data/lib/tecsgen/core/value.rb +650 -0
- data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
- data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
- data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
- data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
- data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
- data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
- data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
- data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
- data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
- data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
- data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
- data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
- data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
- data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
- data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
- data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
- data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
- data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
- data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
- data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
- data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
- data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
- data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
- data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
- data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
- data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
- data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
- data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
- data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
- data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
- data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
- data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
- data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
- data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
- data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
- data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
- data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
- data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
- data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
- data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
- data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
- data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
- data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
- data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
- data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
- data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
- data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
- data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
- data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
- data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
- data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
- data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
- data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
- data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
- data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
- data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
- data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
- data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
- data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
- data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
- data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
- data/lib/tecsgen/version.rb +6 -0
- data/samples/FigureSamples/active/active.cde +104 -0
- data/samples/FigureSamples/active/active.cdl +20 -0
- data/samples/FigureSamples/active/active.pdf +0 -0
- data/samples/FigureSamples/active/active.png +0 -0
- data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
- data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
- data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
- data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
- data/samples/FigureSamples/allocator/allocator.cde +171 -0
- data/samples/FigureSamples/allocator/allocator.cdl +58 -0
- data/samples/FigureSamples/allocator/allocator.png +0 -0
- data/samples/FigureSamples/basic/Makefile +87 -0
- data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
- data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
- data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
- data/samples/FigureSamples/basic/basic.cde +93 -0
- data/samples/FigureSamples/basic/basic.cdl +46 -0
- data/samples/FigureSamples/basic/basic.png +0 -0
- data/samples/FigureSamples/callback/callback.cde +130 -0
- data/samples/FigureSamples/callback/callback.cdl +29 -0
- data/samples/FigureSamples/callback/callback.png +0 -0
- data/samples/FigureSamples/carray/carray.cde +144 -0
- data/samples/FigureSamples/carray/carray.cdl +38 -0
- data/samples/FigureSamples/carray/carray.png +0 -0
- data/samples/FigureSamples/cearray/cearray.cde +314 -0
- data/samples/FigureSamples/cearray/cearray.cdl +60 -0
- data/samples/FigureSamples/cearray/cearray.png +0 -0
- data/samples/FigureSamples/composite/composite-internal.png +0 -0
- data/samples/FigureSamples/composite/composite.cde +216 -0
- data/samples/FigureSamples/composite/composite.cdl +95 -0
- data/samples/FigureSamples/composite/composite.png +0 -0
- data/samples/FigureSamples/earray/earray.cde +142 -0
- data/samples/FigureSamples/earray/earray.cdl +38 -0
- data/samples/FigureSamples/earray/earray.png +0 -0
- data/samples/FigureSamples/join/Makefile +87 -0
- data/samples/FigureSamples/join/join.cde +132 -0
- data/samples/FigureSamples/join/join.cdl +40 -0
- data/samples/FigureSamples/join/join.png +0 -0
- data/samples/FigureSamples/relay/Makefile +99 -0
- data/samples/FigureSamples/relay/relay-internal.png +0 -0
- data/samples/FigureSamples/relay/relay.cde +284 -0
- data/samples/FigureSamples/relay/relay.cdl +52 -0
- data/samples/FigureSamples/relay/relay.png +0 -0
- data/samples/FigureSamples/rpc/Makefile +123 -0
- data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
- data/samples/FigureSamples/rpc/rpc.cde +245 -0
- data/samples/FigureSamples/rpc/rpc.png +0 -0
- data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
- data/samples/SimpleSample/Makefile +25 -0
- data/samples/SimpleSample/SimpleSample/Makefile +86 -0
- data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSample/README.txt +106 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
- data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
- data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
- data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
- data/tecscde.gemspec +41 -0
- 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
|