wxruby3-shapes 0.9.0.pre.beta.3 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +5 -7
  3. data/README.md +38 -6
  4. data/assets/logo.svg +339 -0
  5. data/assets/logo.xpm +60 -0
  6. data/assets/screenshot.png +0 -0
  7. data/assets/social.png +0 -0
  8. data/bin/wx-shapes +1 -1
  9. data/lib/wx/shapes/arrow_base.rb +4 -11
  10. data/lib/wx/shapes/arrows/circle_arrow.rb +22 -11
  11. data/lib/wx/shapes/arrows/circle_prong_arrow.rb +48 -0
  12. data/lib/wx/shapes/arrows/cross_bar_arrow.rb +57 -0
  13. data/lib/wx/shapes/arrows/cross_bar_circle_arrow.rb +56 -0
  14. data/lib/wx/shapes/arrows/cross_bar_prong_arrow.rb +49 -0
  15. data/lib/wx/shapes/arrows/crossed_circle.rb +46 -0
  16. data/lib/wx/shapes/arrows/cup_arrow.rb +65 -0
  17. data/lib/wx/shapes/arrows/diamond_arrow.rb +8 -13
  18. data/lib/wx/shapes/arrows/double_cross_bar_arrow.rb +27 -0
  19. data/lib/wx/shapes/arrows/filled_arrow.rb +60 -0
  20. data/lib/wx/shapes/arrows/line_arrow.rb +67 -0
  21. data/lib/wx/shapes/arrows/open_arrow.rb +22 -23
  22. data/lib/wx/shapes/arrows/prong_arrow.rb +42 -0
  23. data/lib/wx/shapes/arrows/solid_arrow.rb +21 -35
  24. data/lib/wx/shapes/arrows/square_arrow.rb +37 -0
  25. data/lib/wx/shapes/auto_layout.rb +2 -2
  26. data/lib/wx/shapes/base.rb +1 -1
  27. data/lib/wx/shapes/canvas_history.rb +20 -0
  28. data/lib/wx/shapes/connection_point.rb +10 -6
  29. data/lib/wx/shapes/diagram.rb +98 -78
  30. data/lib/wx/shapes/events.rb +8 -8
  31. data/lib/wx/shapes/printout.rb +3 -16
  32. data/lib/wx/shapes/serializable.rb +2 -436
  33. data/lib/wx/shapes/serialize/wx.rb +30 -18
  34. data/lib/wx/shapes/shape.rb +211 -168
  35. data/lib/wx/shapes/shape_canvas.rb +728 -267
  36. data/lib/wx/shapes/shape_data_object.rb +99 -18
  37. data/lib/wx/shapes/shape_handle.rb +18 -11
  38. data/lib/wx/shapes/shape_list.rb +34 -67
  39. data/lib/wx/shapes/shapes/bitmap_shape.rb +23 -24
  40. data/lib/wx/shapes/shapes/box_shape.rb +389 -0
  41. data/lib/wx/shapes/shapes/circle_shape.rb +19 -22
  42. data/lib/wx/shapes/shapes/control_shape.rb +77 -41
  43. data/lib/wx/shapes/shapes/curve_shape.rb +38 -31
  44. data/lib/wx/shapes/shapes/diamond_shape.rb +7 -17
  45. data/lib/wx/shapes/shapes/edit_text_shape.rb +6 -9
  46. data/lib/wx/shapes/shapes/ellipse_shape.rb +12 -15
  47. data/lib/wx/shapes/shapes/flex_grid_shape.rb +58 -33
  48. data/lib/wx/shapes/shapes/grid_shape.rb +259 -161
  49. data/lib/wx/shapes/shapes/line_shape.rb +155 -161
  50. data/lib/wx/shapes/shapes/manager_shape.rb +77 -0
  51. data/lib/wx/shapes/shapes/multi_sel_rect.rb +8 -8
  52. data/lib/wx/shapes/shapes/ortho_shape.rb +31 -36
  53. data/lib/wx/shapes/shapes/polygon_shape.rb +23 -29
  54. data/lib/wx/shapes/shapes/rect_shape.rb +95 -53
  55. data/lib/wx/shapes/shapes/round_ortho_shape.rb +6 -8
  56. data/lib/wx/shapes/shapes/round_rect_shape.rb +20 -24
  57. data/lib/wx/shapes/shapes/square_shape.rb +14 -17
  58. data/lib/wx/shapes/shapes/text_shape.rb +95 -53
  59. data/lib/wx/shapes/version.rb +1 -1
  60. data/lib/wx/shapes/wx.rb +16 -7
  61. data/lib/wx/wx-shapes/cmd/test.rb +1 -1
  62. data/samples/demo/arrows.json +1 -0
  63. data/samples/demo/arrows.yaml +793 -0
  64. data/samples/demo/art/HBox.xpm +22 -0
  65. data/samples/demo/art/VBox.xpm +22 -0
  66. data/samples/demo/art/logo.xpm +60 -0
  67. data/samples/demo/class.json +1 -0
  68. data/samples/demo/class.yaml +5631 -0
  69. data/samples/demo/demo.rb +301 -91
  70. data/samples/demo/dialogs.rb +1405 -0
  71. data/samples/demo/erd.json +1 -0
  72. data/samples/demo/erd.yaml +4072 -0
  73. data/samples/demo/frame_canvas.rb +409 -33
  74. data/samples/sample1/art/logo.xpm +60 -0
  75. data/samples/sample1/sample.rb +11 -11
  76. data/samples/sample2/art/logo.xpm +60 -0
  77. data/samples/sample2/sample.rb +2 -2
  78. data/samples/sample2/sample_shape.rb +15 -15
  79. data/samples/sample3/art/logo.xpm +60 -0
  80. data/samples/sample3/sample.rb +3 -3
  81. data/samples/sample4/art/logo.xpm +60 -0
  82. data/samples/sample4/sample.rb +2 -2
  83. data/tests/lib/wxapp_runner.rb +4 -0
  84. data/tests/serializer_tests.rb +8 -441
  85. data/tests/test_grid_shapes.rb +2 -2
  86. data/tests/test_serialize_xml.rb +17 -0
  87. data/tests/test_serialize_yaml.rb +2 -2
  88. metadata +78 -28
  89. data/lib/wx/shapes/serialize/core.rb +0 -40
  90. data/lib/wx/shapes/serialize/id.rb +0 -82
  91. data/lib/wx/shapes/serializer/json.rb +0 -258
  92. data/lib/wx/shapes/serializer/yaml.rb +0 -125
  93. data/samples/demo/art/sample.xpm +0 -251
  94. data/samples/sample1/art/sample.xpm +0 -251
  95. data/samples/sample2/art/sample.xpm +0 -251
  96. data/samples/sample3/art/sample.xpm +0 -251
  97. data/samples/sample4/art/sample.xpm +0 -251
@@ -6,26 +6,22 @@ module Wx::SF
6
6
  # Class encapsulating rounded rectangle. It extends the basic rectangular shape.
7
7
  class RoundRectShape < RectShape
8
8
 
9
- RADIUS = 20
9
+ # Default values
10
+ module DEFAULT
11
+ # Default corner radius
12
+ RADIUS = 20
13
+ end
10
14
 
11
15
  property :radius
12
16
 
13
- # @overload initialize()
14
- # Default constructor.
15
- # @overload initialize(pos, size, diagram)
16
- # User constructor.
17
- # @param [Wx::RealPoint] pos Initial position
18
- # @param [Wx::RealPoint] size Initial size
19
- # @param [Float] radius Corner radius
20
- # @param [Wx::SF::Diagram] diagram parent diagram
21
- def initialize(*args)
22
- if args.empty?
23
- super
24
- @radius = RADIUS
25
- else
26
- pos, size, @radius, diagram = args
27
- super(pos, size, diagram)
28
- end
17
+ # Constructor.
18
+ # @param [Wx::RealPoint,Wx::Point] pos Initial position
19
+ # @param [Wx::RealPoint,Wx::Size,Wx::Point] size Initial size
20
+ # @param [Float] radius Corner radius
21
+ # @param [Wx::SF::Diagram] diagram parent diagram
22
+ def initialize(pos = Shape::DEFAULT::POSITION, size = RectShape::DEFAULT::SIZE, radius: DEFAULT::RADIUS, diagram: nil)
23
+ super(pos, size, diagram: diagram)
24
+ @radius = radius
29
25
  end
30
26
 
31
27
  # Access (get/set) radius.
@@ -73,8 +69,8 @@ module Wx::SF
73
69
  super
74
70
  return
75
71
  end
76
- dc.with_pen(@border) do
77
- dc.with_brush(@fill) do
72
+ dc.with_pen(border) do
73
+ dc.with_brush(fill) do
78
74
  dc.draw_rounded_rectangle(get_absolute_position.to_point, @rect_size.to_size, @radius)
79
75
  end
80
76
  end
@@ -88,8 +84,8 @@ module Wx::SF
88
84
  super
89
85
  return
90
86
  end
91
- dc.with_pen(Wx::Pen.new(@hover_color, 1)) do
92
- dc.with_brush(@fill) do
87
+ dc.with_pen(Wx::Pen.new(hover_colour, 1)) do
88
+ dc.with_brush(fill) do
93
89
  dc.draw_rounded_rectangle(get_absolute_position.to_point, @rect_size.to_size, @radius)
94
90
  end
95
91
  end
@@ -104,8 +100,8 @@ module Wx::SF
104
100
  super
105
101
  return
106
102
  end
107
- dc.with_pen(Wx::Pen.new(@hover_color, 2)) do
108
- dc.with_brush(@fill) do
103
+ dc.with_pen(Wx::Pen.new(hover_colour, 2)) do
104
+ dc.with_brush(fill) do
109
105
  dc.draw_rounded_rectangle(get_absolute_position.to_point, @rect_size.to_size, @radius)
110
106
  end
111
107
  end
@@ -118,7 +114,7 @@ module Wx::SF
118
114
  super
119
115
  return
120
116
  end
121
- if @fill.style != Wx::BrushStyle::BRUSHSTYLE_TRANSPARENT
117
+ if fill.style != Wx::BrushStyle::BRUSHSTYLE_TRANSPARENT
122
118
  dc.with_pen(Wx::TRANSPARENT_PEN) do
123
119
  dc.with_brush(get_parent_canvas.get_shadow_fill) do
124
120
  dc.draw_rounded_rectangle((get_absolute_position + get_parent_canvas.get_shadow_offset).to_point,
@@ -7,22 +7,19 @@ module Wx::SF
7
7
 
8
8
  class SquareShape < RectShape
9
9
 
10
+ # Default values
11
+ module DEFAULT
12
+ # Default square size
13
+ SIZE = 100.0
14
+ end
10
15
 
11
- # @overload initialize()
12
- # Default constructor.
13
- # @overload initialize(pos, size, diagram)
14
- # User constructor.
15
- # @param [Wx::RealPoint] pos Initial position
16
- # @param [Float] size Initial size
17
- # @param [Wx::SF::Diagram] diagram parent diagram
18
- def initialize(*args)
19
- if args.empty?
20
- super
21
- set_rect_size(100,100)
22
- else
23
- pos, sz, diagram = args
24
- super(pos, Wx::RealPoint.new(sz, sz), diagram)
25
- end
16
+
17
+ # Constructor.
18
+ # @param [Wx::RealPoint,Wx::Point] pos Initial position
19
+ # @param [Float] size Initial size
20
+ # @param [Wx::SF::Diagram] diagram parent diagram
21
+ def initialize(pos = Shape::DEFAULT::POSITION, size = DEFAULT::SIZE, diagram: nil)
22
+ super(pos, Wx::RealPoint.new(size, size), diagram: diagram)
26
23
  end
27
24
 
28
25
  # Get shape's center. Default implementation does nothing. The function can be overridden if necessary.
@@ -56,7 +53,7 @@ module Wx::SF
56
53
  # @param [Shape::Handle] handle Reference to dragged handle
57
54
  # @see #on_handle
58
55
  def do_on_handle(handle)
59
- prev_size = @rect_size.dup
56
+ prev_x, prev_y = @rect_size
60
57
 
61
58
  # perform standard operations
62
59
  case handle.type
@@ -75,7 +72,7 @@ module Wx::SF
75
72
  end
76
73
 
77
74
  # calculate common size and some auxiliary values
78
- if (prev_size.x < @rect_size.x) || (prev_size.y < @rect_size.y)
75
+ if (prev_x < @rect_size.x) || (prev_y < @rect_size.y)
79
76
  if @rect_size.x >= @rect_size.y
80
77
  maxsize = @rect_size.x
81
78
  else
@@ -9,50 +9,61 @@ module Wx::SF
9
9
 
10
10
  # default values
11
11
  module DEFAULT
12
- # Default value of TextShape @font data member.
13
- FONT = Wx::SWISS_FONT if Wx::App.is_main_loop_running
14
- Wx.add_delayed_constant(self, :FONT) { Wx::SWISS_FONT }
15
- # Default value of TextShape @text_color data member.
16
- TEXTCOLOR = Wx::BLACK if Wx::App.is_main_loop_running
17
- Wx.add_delayed_constant(self, :TEXTCOLOR) { Wx::BLACK }
12
+ class << self
13
+ # Default value of TextShape @font data member.
14
+ def font; begin; @font = Wx::SWISS_FONT.dup; @font.point_size = 12; end unless @font; @font; end
15
+ # Default value of TextShape @text_color data member.
16
+ def text_color; @txtclr ||= Wx::BLACK.dup; end
17
+ # Standard value of TextShape @fill data member
18
+ def text_fill; @text_fill ||= Wx::TRANSPARENT_BRUSH.dup; end
19
+ # Standard value of TextShape @border data member
20
+ def text_border; @text_border ||= Wx::TRANSPARENT_PEN.dup; end
21
+ end
22
+ TEXT = 'Text'
18
23
  end
19
24
 
20
- property :font, :text_colour, :text
21
-
22
- # @overload initialize()
23
- # Default constructor.
24
- # @overload initialize(pos, size, diagram)
25
- # User constructor.
26
- # @param [Wx::RealPoint] pos Initial position
27
- # @param [String] txt Text content
28
- # @param [Wx::SF::Diagram] diagram parent diagram
29
- def initialize(*args)
30
- txt = nil
31
- if args.empty?
32
- super
33
- else
34
- pos, txt, diagram = args
35
- super(pos, Wx::RealPoint.new, diagram)
36
- end
37
- @font = DEFAULT::FONT
38
- @font.set_point_size(12)
25
+ property :text
26
+ property({ text_colour: :serialize_text_colour,
27
+ font: :serialize_text_font }, optional: true)
28
+
29
+ # Constructor.
30
+ # @param [Wx::RealPoint,Wx::Point] pos Initial position
31
+ # @param [String] txt Text content
32
+ # @param [Wx::SF::Diagram] diagram parent diagram
33
+ def initialize(pos = Shape::DEFAULT::POSITION, txt = DEFAULT::TEXT, diagram: nil)
34
+ super(pos, Wx::RealPoint.new, diagram: diagram)
35
+ @font = nil
36
+ @scaled_font = nil
39
37
 
40
38
  @line_height = 12
41
39
 
42
- @text_color = DEFAULT::TEXTCOLOR
43
- @text = txt || 'Text'
40
+ @text_color = nil
41
+ @text = txt
44
42
 
45
- @fill = Wx::TRANSPARENT_BRUSH
46
- @border = Wx::TRANSPARENT_PEN
47
43
  @rect_size = Wx::RealPoint.new
48
44
 
49
45
  update_rect_size
50
46
  end
51
47
 
52
48
  # Set text font.
53
- # @param [Wx::Font] font Font
54
- def set_font(font)
55
- @font = font
49
+ # @overload set_text_font(font)
50
+ # @param [Wx::Font] font
51
+ # @overload set_text_font(font_info)
52
+ # @param [Wx::FontInfo] font_info
53
+ # @overload set_text_font(pointSize, family, style, weight, underline=false, faceName=(''), encoding=Wx::FontEncoding::FONTENCODING_DEFAULT)
54
+ # @param pointSize [Integer] Size in points. See {Wx::Font#initialize}.
55
+ # @param family [Wx::FontFamily] The font family. See {Wx::Font#initialize}.
56
+ # @param style [Wx::FontStyle] One of {Wx::FontStyle::FONTSTYLE_NORMAL}, {Wx::FontStyle::FONTSTYLE_SLANT} and {Wx::FontStyle::FONTSTYLE_ITALIC}. See {Wx::Font#initialize}.
57
+ # @param weight [Wx::FontWeight] Font weight. One of the {Wx::FontWeight} enumeration values. See {Wx::Font#initialize}.
58
+ # @param underline [Boolean] The value can be true or false. See {Wx::Font#initialize}.
59
+ # @param faceName [String] An optional string specifying the face name to be used. See {Wx::Font#initialize}.
60
+ # @param encoding [Wx::FontEncoding] An encoding which may be one of the enumeration values of {Wx::FontEncoding}. See {Wx::Font#initialize}.
61
+ def set_font(*args)
62
+ @font = if args.size == 1 && Wx::Font === args.first
63
+ args.first
64
+ else
65
+ Wx::Font.new(*args)
66
+ end
56
67
  update_rect_size
57
68
  end
58
69
  alias :font= :set_font
@@ -60,7 +71,7 @@ module Wx::SF
60
71
  # Get text font.
61
72
  # @return [Wx::Font] Font
62
73
  def get_font
63
- @font
74
+ @font || (@diagram&.shape_canvas ? @diagram.shape_canvas.text_font : DEFAULT.font)
64
75
  end
65
76
  alias :font :get_font
66
77
 
@@ -79,23 +90,36 @@ module Wx::SF
79
90
  end
80
91
  alias :text :get_text
81
92
 
93
+ # Get current fill style.
94
+ # @return [Wx::Brush] Current brush
95
+ def get_fill
96
+ @fill || (@diagram&.shape_canvas ? @diagram.shape_canvas.text_fill : DEFAULT.text_fill)
97
+ end
98
+ alias :fill :get_fill
99
+
100
+ # Get current border style.
101
+ # @return [Wx::Pen] Current pen
102
+ def get_border
103
+ @border || (@diagram&.shape_canvas ? @diagram.shape_canvas.text_border : DEFAULT.text_border)
104
+ end
105
+ alias :border :get_border
82
106
 
83
107
  # Set text color.
84
- # @param [Wx::Colour] col Text color
108
+ # @param [Wx::Colour,String,Symbol] col Text color
85
109
  def set_text_colour(col)
86
- @text_color = col
110
+ @text_color = Wx::Colour === col ? col : Wx::Colour.new(col)
87
111
  end
88
112
  alias :text_colour= :set_text_colour
89
113
 
90
114
  # Get text color.
91
115
  # @return [Wx::Colour] Current text color
92
116
  def get_text_colour
93
- @text_color
117
+ @text_color || (@diagram&.shape_canvas ? @diagram.shape_canvas.text_colour : DEFAULT.text_color)
94
118
  end
95
119
  alias :text_colour :get_text_colour
96
120
 
97
121
  # Update shape (align all child shapes and resize it to fit them)
98
- def update
122
+ def update(recurse = true)
99
123
  update_rect_size
100
124
  super
101
125
  end
@@ -106,13 +130,14 @@ module Wx::SF
106
130
  w = -1
107
131
  h = -1
108
132
  if get_parent_canvas
133
+ cur_font = @scaled_font || font
109
134
  if ShapeCanvas.gc_enabled?
110
135
  Wx::GraphicsContext.draw_on(get_parent_canvas) do |gc|
111
136
  # calculate text extent
112
137
  hd = -1
113
138
  e = 0
114
139
 
115
- gc.set_font(@font, Wx::BLACK)
140
+ gc.set_font(cur_font, Wx::BLACK)
116
141
 
117
142
  # we must use split string to inspect all lines of possible multiline text
118
143
  h = 0
@@ -127,7 +152,7 @@ module Wx::SF
127
152
  end
128
153
  else
129
154
  get_parent_canvas.paint do |dc|
130
- dc.set_font(@font)
155
+ dc.set_font(cur_font)
131
156
  w, h, @line_height = dc.get_multi_line_text_extent(@text)
132
157
  dc.set_font(Wx::NULL_FONT)
133
158
  end
@@ -160,8 +185,6 @@ module Wx::SF
160
185
  # @param [Float] x Horizontal scale factor
161
186
  # @param [Float] y Vertical scale factor
162
187
  def scale_rectangle(x, y)
163
- s = 1.0
164
-
165
188
  if x == 1.0
166
189
  s = y
167
190
  elsif y == 1.0
@@ -172,10 +195,17 @@ module Wx::SF
172
195
  s = y
173
196
  end
174
197
 
175
- size = @font.get_point_size * s
198
+ cur_font = @scaled_font || font
199
+
200
+ size = cur_font.get_point_size * s
176
201
  size = 5 if size < 5
177
202
 
178
- @font.set_point_size(size)
203
+ if size == font.point_size
204
+ @scaled_font = nil
205
+ else
206
+ @scaled_font ||= font.dup
207
+ @scaled_font.set_point_size(size.to_i) unless size == @scaled_font.get_point_size
208
+ end
179
209
  update_rect_size
180
210
  end
181
211
 
@@ -235,7 +265,7 @@ module Wx::SF
235
265
 
236
266
  # Draw the shape in the highlighted mode (another shape is dragged over this
237
267
  # shape and this shape will accept the dragged one if it will be dropped on it).
238
- # The function can be overridden if neccessary.
268
+ # The function can be overridden if necessary.
239
269
  # @param [Wx::DC] dc Reference to device context where the shape will be drawn to
240
270
  def draw_highlighted(dc)
241
271
  super
@@ -277,7 +307,7 @@ module Wx::SF
277
307
  end
278
308
 
279
309
  # Event handler called during dragging of the right shape handle.
280
- # The function can be overridden if neccessary.
310
+ # The function can be overridden if necessary.
281
311
  # @param [Shape::Handle] handle Reference to dragged shape handle
282
312
  def on_right_handle(handle)
283
313
  # HINT: overload it for custom actions...
@@ -286,7 +316,7 @@ module Wx::SF
286
316
  end
287
317
 
288
318
  # Event handler called during dragging of the bottom shape handle.
289
- # The function can be overridden if neccessary.
319
+ # The function can be overridden if necessary.
290
320
  # @param [Shape::Handle] handle Reference to dragged shape handle
291
321
  def on_bottom_handle(handle)
292
322
  # HINT: overload it for custom actions...
@@ -297,10 +327,10 @@ module Wx::SF
297
327
  # Draw text shape.
298
328
  # @param [Wx::DC] dc Device context where the text shape will be drawn to
299
329
  def draw_text_content(dc)
300
- dc.with_brush(@fill) do
301
- dc.set_background_mode(Wx::BrushStyle::BRUSHSTYLE_TRANSPARENT)
302
- dc.set_text_foreground(@text_color)
303
- dc.with_font(@font) do
330
+ dc.with_brush(fill) do
331
+ dc.set_background_mode(Wx::BrushStyle::BRUSHSTYLE_TRANSPARENT.to_i)
332
+ dc.set_text_foreground(text_colour)
333
+ dc.with_font(@scaled_font || font) do
304
334
  pos = get_absolute_position
305
335
  # draw all text lines
306
336
  @text.split("\n").each_with_index do |line, i|
@@ -310,15 +340,27 @@ module Wx::SF
310
340
  end
311
341
  end
312
342
 
343
+ # (de-)serialize text colour; allows for nil values
344
+ def serialize_text_colour(*val)
345
+ @text_color = val.first unless val.empty?
346
+ @text_color
347
+ end
348
+
349
+ # (de-)serialize text colour; allows for nil values
350
+ def serialize_text_font(*val)
351
+ @font = val.first unless val.empty?
352
+ @font
353
+ end
354
+
313
355
  # Deserialize attributes and recalculate rectangle size afterwards.
314
- # @param [Hash] data
315
356
  # @return [self]
316
- def from_serialized(data)
317
- super
357
+ def deserialize_finalize
318
358
  update_rect_size
319
359
  self
320
360
  end
321
361
 
362
+ define_deserialize_finalizer :deserialize_finalize
363
+
322
364
  end
323
365
 
324
366
  end
@@ -5,7 +5,7 @@ module Wx
5
5
 
6
6
  module SF
7
7
 
8
- VERSION = '0.9.0-beta.3'
8
+ VERSION = '0.9.6'
9
9
 
10
10
  end
11
11
 
data/lib/wx/shapes/wx.rb CHANGED
@@ -3,17 +3,15 @@
3
3
 
4
4
  module Wx
5
5
 
6
- class Wx::RealPoint
6
+ class RealPoint
7
7
 
8
8
  # Returns distance from this point to given point.
9
- # @param [Wx::RealPoint,Wx::Point,Array(Integer,Integer)] pt2
9
+ # @param [Wx::RealPoint,Wx::Point,Array(Integer,Integer),Array(Float,Float)] pt2
10
10
  # @return [Float] distance to given point
11
11
  def distance_to(pt2)
12
- if Array === pt2 && pt2.size == 2
13
- to_x, to_y = pt2
14
- else
15
- to_x = pt2.x; to_y = pt2.y
16
- end
12
+ to_x, to_y = pt2
13
+ to_x = to_x.to_f
14
+ to_y = to_y.to_f
17
15
  Math.sqrt((to_x - self.x)*(to_x - self.x) + (to_y - self.y)*(to_y - self.y))
18
16
  end
19
17
  alias :distance :distance_to
@@ -26,4 +24,15 @@ module Wx
26
24
 
27
25
  end
28
26
 
27
+ class Size
28
+
29
+ # Returns this size as a Wx::RealPoint.
30
+ # @return [Wx::RealPoint]
31
+ def to_real_point
32
+ Wx::RealPoint.new(self.width.to_f, self.height.to_f)
33
+ end
34
+ alias :to_real :to_real_point
35
+
36
+ end
37
+
29
38
  end
@@ -16,7 +16,7 @@ module WxShapes
16
16
  description
17
17
  else
18
18
  Dir[File.join(WxShapes::ROOT, 'tests', 'test_*.rb')].each do |test|
19
- system(RUBY, test)
19
+ exit(1) unless system(RUBY, test)
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1 @@
1
+ {"rbklass":"Array","data":[{"rbklass":"Wx::SF::ShapeCanvas::Version","data":{"version_info":{"rbklass":"Wx::SF::ShapeCanvas::Version::VersionInfo","v":[0,9,0]}}},{"rbklass":"Wx::SF::ShapeCanvas::Settings","data":{"scale":1.0,"min_scale":0.1,"max_scale":2.0,"background_color":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[240,240,240,255]}}},"common_hover_color":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[120,120,255,255]}},"&id":3597080},"common_border_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","data":{"value":100},"&id":3526760}},"&id":3600900},"common_fill_brush":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","data":{"value":100},"&id":3526840}},"&id":3600960},"common_line_pen":{"rbklass":"Wx::Pen","*id":3600900},"common_arrow_fill":{"rbklass":"Wx::Brush","*id":3600960},"common_text_color":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"common_text_fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"style":{"rbklass":"Wx::BrushStyle","data":{"value":106},"&id":8740}}},"common_text_border":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","data":{"value":106},"&id":7640}}},"common_text_font":{"rbklass":"Wx::Font","data":{"font_info":"Sans 12"}},"common_control_fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":8740}}},"common_control_border":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":7640}}},"common_control_mod_fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","data":{"value":111}}}},"common_control_mod_border":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,255,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"grid_line_mult":10,"grid_color":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[200,200,200,255]}}},"grid_style":{"rbklass":"Wx::PenStyle","data":{"value":103}},"gradient_from":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[240,240,240,255]}}},"gradient_to":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[200,200,255,255]}}},"style":{"rbklass":"Wx::SF::ShapeCanvas::STYLE","data":{"value":3071}},"shadow_offset":{"rbklass":"Wx::RealPoint","data":{"x":4.0,"y":4.0}},"shadow_fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[150,150,150,128]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"print_h_align":{"rbklass":"Wx::SF::ShapeCanvas::HALIGN","data":{"value":2}},"print_v_align":{"rbklass":"Wx::SF::ShapeCanvas::VALIGN","data":{"value":2}},"print_mode":{"rbklass":"Wx::SF::ShapeCanvas::PRINTMODE","data":{"value":2}},"grid_size":10}},{"rbklass":"Wx::SF::Diagram","data":{"shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[{"rbklass":"Wx::SF::SquareShape","data":{"rect_size":{"rbklass":"Wx::RealPoint","data":{"x":100.0,"y":100.0}},"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"border":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","data":{"value":319}},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":110.0,"y":230.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","data":{"value":0},"&id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","data":{"value":0},"&id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}},"&id":3596520},{"rbklass":"Wx::SF::EllipseShape","data":{"rect_size":{"rbklass":"Wx::RealPoint","data":{"x":100.0,"y":50.0}},"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"border":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","data":{"value":319}},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":830.0,"y":250.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}},"&id":3596540},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::ProngArrow","data":{"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::CrossBarArrow","data":{"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","data":{"value":319},"&id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::DiamondArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::DoubleCrossBarArrow","data":{"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":310.0,"y":380.0}},{"rbklass":"Wx::RealPoint","data":{"x":770.0,"y":380.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","*id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::SquareArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::CrossBarCircleArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":260.0,"y":460.0}},{"rbklass":"Wx::RealPoint","data":{"x":780.0,"y":460.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","*id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::CrossBarProngArrow","data":{"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::CircleProngArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":230.0,"y":550.0}},{"rbklass":"Wx::RealPoint","data":{"x":810.0,"y":540.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","*id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::CupArrow","data":{"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::OpenArrow","data":{"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":300.0,"y":150.0}},{"rbklass":"Wx::RealPoint","data":{"x":770.0,"y":150.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","*id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::CircleArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"trg_arrow":{"rbklass":"Wx::SF::SolidArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":280.0,"y":90.0}},{"rbklass":"Wx::RealPoint","data":{"x":790.0,"y":90.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","*id":3597680},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","*id":3597020},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","*id":3597040},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}},{"rbklass":"Wx::SF::LineShape","data":{"src_shape":{"rbklass":"Wx::SF::SquareShape","*id":3596520},"trg_shape":{"rbklass":"Wx::SF::EllipseShape","*id":3596540},"src_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"trg_point":{"rbklass":"Wx::RealPoint","data":{"x":0.0,"y":0.0}},"stand_alone":false,"src_arrow":{"rbklass":"Wx::SF::CrossedCircleArrow","data":{"fill":{"rbklass":"Wx::Brush","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[255,255,255,255]}}},"style":{"rbklass":"Wx::BrushStyle","*id":3526840}}},"pen":null}},"trg_arrow":null,"src_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"trg_offset":{"rbklass":"Wx::RealPoint","data":{"x":-1.0,"y":-1.0}},"dock_point":18446744073709551616,"control_points":{"rbklass":"Array","data":[{"rbklass":"Wx::RealPoint","data":{"x":220.0,"y":60.0}},{"rbklass":"Wx::RealPoint","data":{"x":830.0,"y":60.0}}]},"line_pen":{"rbklass":"Wx::Pen","data":{"colour":{"rbklass":"Wx::Colour","data":{"colour":{"rbklass":"Array","data":[0,0,0,255]}}},"width":1,"style":{"rbklass":"Wx::PenStyle","*id":3526760}}},"active":true,"visibility":true,"style":{"rbklass":"Wx::SF::Shape::STYLE","data":{"value":319}},"accepted_children":{"rbklass":"Set","a":["Wx::SF::TextShape","Wx::SF::EditTextShape"]},"accepted_connections":{"rbklass":"Set","a":["NilClass"]},"accepted_src_neighbours":{"rbklass":"Set","a":["NilClass"]},"accepted_trg_neighbours":{"rbklass":"Set","a":["NilClass"]},"relative_position":{"rbklass":"Wx::RealPoint","data":{"x":540.0,"y":290.0}},"h_align":{"rbklass":"Wx::SF::Shape::HALIGN","data":{"value":0}},"v_align":{"rbklass":"Wx::SF::Shape::VALIGN","data":{"value":0}},"h_border":0.0,"v_border":0.0,"custom_dock_point":-3,"connection_points":{"rbklass":"Array","data":[]},"user_data":null,"hover_colour":{"rbklass":"Wx::Colour","*id":3597080},"child_shapes":{"rbklass":"Wx::SF::ShapeList","data":{"list":{"rbklass":"Set","a":[]}}}}}]}}},"accepted_shapes":{"rbklass":"Set","a":["NilClass"]},"accepted_top_shapes":{"rbklass":"Set","a":["NilClass"]}}}]}