wxruby3-shapes 0.9.0.pre.beta.3 → 0.9.6
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 +4 -4
- data/INSTALL.md +5 -7
- data/README.md +38 -6
- data/assets/logo.svg +339 -0
- data/assets/logo.xpm +60 -0
- data/assets/screenshot.png +0 -0
- data/assets/social.png +0 -0
- data/bin/wx-shapes +1 -1
- data/lib/wx/shapes/arrow_base.rb +4 -11
- data/lib/wx/shapes/arrows/circle_arrow.rb +22 -11
- data/lib/wx/shapes/arrows/circle_prong_arrow.rb +48 -0
- data/lib/wx/shapes/arrows/cross_bar_arrow.rb +57 -0
- data/lib/wx/shapes/arrows/cross_bar_circle_arrow.rb +56 -0
- data/lib/wx/shapes/arrows/cross_bar_prong_arrow.rb +49 -0
- data/lib/wx/shapes/arrows/crossed_circle.rb +46 -0
- data/lib/wx/shapes/arrows/cup_arrow.rb +65 -0
- data/lib/wx/shapes/arrows/diamond_arrow.rb +8 -13
- data/lib/wx/shapes/arrows/double_cross_bar_arrow.rb +27 -0
- data/lib/wx/shapes/arrows/filled_arrow.rb +60 -0
- data/lib/wx/shapes/arrows/line_arrow.rb +67 -0
- data/lib/wx/shapes/arrows/open_arrow.rb +22 -23
- data/lib/wx/shapes/arrows/prong_arrow.rb +42 -0
- data/lib/wx/shapes/arrows/solid_arrow.rb +21 -35
- data/lib/wx/shapes/arrows/square_arrow.rb +37 -0
- data/lib/wx/shapes/auto_layout.rb +2 -2
- data/lib/wx/shapes/base.rb +1 -1
- data/lib/wx/shapes/canvas_history.rb +20 -0
- data/lib/wx/shapes/connection_point.rb +10 -6
- data/lib/wx/shapes/diagram.rb +98 -78
- data/lib/wx/shapes/events.rb +8 -8
- data/lib/wx/shapes/printout.rb +3 -16
- data/lib/wx/shapes/serializable.rb +2 -436
- data/lib/wx/shapes/serialize/wx.rb +30 -18
- data/lib/wx/shapes/shape.rb +211 -168
- data/lib/wx/shapes/shape_canvas.rb +728 -267
- data/lib/wx/shapes/shape_data_object.rb +99 -18
- data/lib/wx/shapes/shape_handle.rb +18 -11
- data/lib/wx/shapes/shape_list.rb +34 -67
- data/lib/wx/shapes/shapes/bitmap_shape.rb +23 -24
- data/lib/wx/shapes/shapes/box_shape.rb +389 -0
- data/lib/wx/shapes/shapes/circle_shape.rb +19 -22
- data/lib/wx/shapes/shapes/control_shape.rb +77 -41
- data/lib/wx/shapes/shapes/curve_shape.rb +38 -31
- data/lib/wx/shapes/shapes/diamond_shape.rb +7 -17
- data/lib/wx/shapes/shapes/edit_text_shape.rb +6 -9
- data/lib/wx/shapes/shapes/ellipse_shape.rb +12 -15
- data/lib/wx/shapes/shapes/flex_grid_shape.rb +58 -33
- data/lib/wx/shapes/shapes/grid_shape.rb +259 -161
- data/lib/wx/shapes/shapes/line_shape.rb +155 -161
- data/lib/wx/shapes/shapes/manager_shape.rb +77 -0
- data/lib/wx/shapes/shapes/multi_sel_rect.rb +8 -8
- data/lib/wx/shapes/shapes/ortho_shape.rb +31 -36
- data/lib/wx/shapes/shapes/polygon_shape.rb +23 -29
- data/lib/wx/shapes/shapes/rect_shape.rb +95 -53
- data/lib/wx/shapes/shapes/round_ortho_shape.rb +6 -8
- data/lib/wx/shapes/shapes/round_rect_shape.rb +20 -24
- data/lib/wx/shapes/shapes/square_shape.rb +14 -17
- data/lib/wx/shapes/shapes/text_shape.rb +95 -53
- data/lib/wx/shapes/version.rb +1 -1
- data/lib/wx/shapes/wx.rb +16 -7
- data/lib/wx/wx-shapes/cmd/test.rb +1 -1
- data/samples/demo/arrows.json +1 -0
- data/samples/demo/arrows.yaml +793 -0
- data/samples/demo/art/HBox.xpm +22 -0
- data/samples/demo/art/VBox.xpm +22 -0
- data/samples/demo/art/logo.xpm +60 -0
- data/samples/demo/class.json +1 -0
- data/samples/demo/class.yaml +5631 -0
- data/samples/demo/demo.rb +301 -91
- data/samples/demo/dialogs.rb +1405 -0
- data/samples/demo/erd.json +1 -0
- data/samples/demo/erd.yaml +4072 -0
- data/samples/demo/frame_canvas.rb +409 -33
- data/samples/sample1/art/logo.xpm +60 -0
- data/samples/sample1/sample.rb +11 -11
- data/samples/sample2/art/logo.xpm +60 -0
- data/samples/sample2/sample.rb +2 -2
- data/samples/sample2/sample_shape.rb +15 -15
- data/samples/sample3/art/logo.xpm +60 -0
- data/samples/sample3/sample.rb +3 -3
- data/samples/sample4/art/logo.xpm +60 -0
- data/samples/sample4/sample.rb +2 -2
- data/tests/lib/wxapp_runner.rb +4 -0
- data/tests/serializer_tests.rb +8 -441
- data/tests/test_grid_shapes.rb +2 -2
- data/tests/test_serialize_xml.rb +17 -0
- data/tests/test_serialize_yaml.rb +2 -2
- metadata +78 -28
- data/lib/wx/shapes/serialize/core.rb +0 -40
- data/lib/wx/shapes/serialize/id.rb +0 -82
- data/lib/wx/shapes/serializer/json.rb +0 -258
- data/lib/wx/shapes/serializer/yaml.rb +0 -125
- data/samples/demo/art/sample.xpm +0 -251
- data/samples/sample1/art/sample.xpm +0 -251
- data/samples/sample2/art/sample.xpm +0 -251
- data/samples/sample3/art/sample.xpm +0 -251
- data/samples/sample4/art/sample.xpm +0 -251
@@ -9,11 +9,10 @@ module Wx::SF
|
|
9
9
|
|
10
10
|
# Default values
|
11
11
|
module DEFAULT
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
Wx.add_delayed_constant(self, :PEN) { Wx::Pen.new(Wx::BLACK) }
|
12
|
+
class << self
|
13
|
+
# Default value of LineShape @pen data member.
|
14
|
+
def pen; @pen ||= Wx::BLACK_PEN.dup; end
|
15
|
+
end
|
17
16
|
# Default value of LineShape @dock_point data member.
|
18
17
|
DOCKPOINT = 0
|
19
18
|
# Default value of LineShape @dock_point data member (start line point).
|
@@ -21,7 +20,7 @@ module Wx::SF
|
|
21
20
|
# Default value of LineShape @dock_point data member (end line point).
|
22
21
|
DOCKPOINT_END = -2
|
23
22
|
# Default value of LineShape @dock_point data member (middle dock point).
|
24
|
-
DOCKPOINT_CENTER = 2**64
|
23
|
+
DOCKPOINT_CENTER = (2**64).to_i
|
25
24
|
# Default value of LineShape @src_offset and LineShape @trg_offset data members.
|
26
25
|
OFFSET = Wx::RealPoint.new(-1, -1)
|
27
26
|
# Default value of LineShape @src_point and LineShape @trg_point data members.
|
@@ -38,58 +37,50 @@ module Wx::SF
|
|
38
37
|
TRGCHANGE = self.new(3)
|
39
38
|
end
|
40
39
|
|
41
|
-
property :
|
42
|
-
property src_point: :serialize_src_point, trg_point: :serialize_trg_point
|
40
|
+
property :src_shape, :trg_shape, optional: true
|
41
|
+
property({ src_point: :serialize_src_point, trg_point: :serialize_trg_point },
|
42
|
+
optional: ->(obj, _id) { obj.src_shape.nil? && obj.trg_shape.nil? ? nil : DEFAULT::POINT})
|
43
43
|
property :stand_alone, :src_arrow, :trg_arrow, :src_offset, :trg_offset,
|
44
|
-
:dock_point, :
|
45
|
-
|
46
|
-
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# @param [
|
50
|
-
# @param [
|
51
|
-
# @param [Array<Wx::RealPoint
|
44
|
+
:dock_point, :control_points
|
45
|
+
property({ line_pen: :serialize_line_pen }, optional: true)
|
46
|
+
|
47
|
+
# @overload initialize(src = nil, trg = nil, path: nil, manager: nil)
|
48
|
+
# Constructor for connecting two shapes.
|
49
|
+
# @param [Shape] src source shape
|
50
|
+
# @param [Shape] trg target shape
|
51
|
+
# @param [Array<Wx::RealPoint>,nil] path List of the line control points (can be empty or nil)
|
52
52
|
# @param [Diagram] diagram containing diagram
|
53
|
-
# @overload initialize(src, trg, path, manager)
|
54
|
-
#
|
55
|
-
# @param [Wx::RealPoint]
|
53
|
+
# @overload initialize(src, trg, path: nil, manager: nil)
|
54
|
+
# Constructor for standalone line.
|
55
|
+
# @param [Wx::RealPoint,Wx::Point] src starting line point
|
56
|
+
# @param [Wx::RealPoint,Wx::Point] trg end line point
|
56
57
|
# @param [Array<Wx::RealPoint>,nil] path List of the line control points (can be empty or nil)
|
57
58
|
# @param [Diagram] diagram containing diagram
|
58
|
-
def initialize(
|
59
|
-
|
60
|
-
|
61
|
-
@
|
59
|
+
def initialize(src = nil, trg = nil, path: nil, diagram: nil)
|
60
|
+
super(diagram: diagram)
|
61
|
+
if src.respond_to?(:to_real_point) && trg.respond_to?(:to_real_point)
|
62
|
+
@src_point = Wx::Point === src ? src.to_real_point : src.dup
|
63
|
+
@trg_point = Wx::Point === trg ? trg.to_real_point : trg.dup
|
64
|
+
@src_shape = @trg_shape = nil
|
65
|
+
@stand_alone = true
|
66
|
+
elsif (src.nil? && trg.nil?) || (src.is_a?(Shape) && trg.is_a?(Shape))
|
62
67
|
@src_point = DEFAULT::POINT.dup
|
63
68
|
@trg_point = DEFAULT::POINT.dup
|
64
|
-
@
|
65
|
-
@
|
69
|
+
@src_shape = src
|
70
|
+
@trg_shape = trg
|
71
|
+
@stand_alone = false
|
66
72
|
else
|
67
|
-
|
68
|
-
super(Shape::DEFAULT::POSITION.dup, diagram)
|
69
|
-
if src.respond_to?(:to_real_point) && trg.respond_to?(:to_real_point)
|
70
|
-
@src_point = src.to_real_point
|
71
|
-
@trg_point = trg.to_real_point
|
72
|
-
@src_shape_id = @trg_shape_id = DEFAULT::UNKNOWNID
|
73
|
-
@stand_alone = true
|
74
|
-
elsif src.is_a?(Wx::SF::Serializable::ID) && trg.is_a?(Wx::SF::Serializable::ID)
|
75
|
-
@src_point = DEFAULT::POINT.dup
|
76
|
-
@trg_point = DEFAULT::POINT.dup
|
77
|
-
@src_shape_id = src
|
78
|
-
@trg_shape_id = trg
|
79
|
-
@stand_alone = false
|
80
|
-
else
|
81
|
-
::Kernel.raise ArgumentError, "Invalid arguments #{args}"
|
82
|
-
end
|
83
|
-
path ||= []
|
84
|
-
@lst_points = path.select { |pt| pt.respond_to?(:to_real_point) }.collect { |pt| pt.to_real_point }
|
85
|
-
::Kernel.raise ArgumentError, "Invalid arguments #{args}" unless path.size == @lst_points.size
|
73
|
+
::Kernel.raise ArgumentError, "Invalid arguments #{args}"
|
86
74
|
end
|
75
|
+
path ||= []
|
76
|
+
@lst_points = path.select { |pt| pt.respond_to?(:to_real_point) }.collect { |pt| pt.to_real_point }
|
77
|
+
::Kernel.raise ArgumentError, "Invalid arguments #{args}" unless path.size == @lst_points.size
|
87
78
|
|
88
79
|
@src_arrow = nil
|
89
80
|
@trg_arrow = nil
|
90
81
|
|
91
82
|
@dock_point = DEFAULT::DOCKPOINT
|
92
|
-
@pen =
|
83
|
+
@pen = nil
|
93
84
|
|
94
85
|
@src_offset = DEFAULT::OFFSET.dup
|
95
86
|
@trg_offset = DEFAULT::OFFSET.dup
|
@@ -99,43 +90,41 @@ module Wx::SF
|
|
99
90
|
@unfinished_point = Wx::Point.new
|
100
91
|
end
|
101
92
|
|
102
|
-
# Get source shape
|
103
|
-
# @return [
|
104
|
-
def
|
105
|
-
@
|
93
|
+
# Get source shape
|
94
|
+
# @return [Shape, nil]
|
95
|
+
def get_src_shape
|
96
|
+
@src_shape
|
106
97
|
end
|
107
|
-
alias :
|
98
|
+
alias :src_shape :get_src_shape
|
108
99
|
|
109
|
-
# Set source shape
|
110
|
-
# @param [
|
111
|
-
def
|
112
|
-
@
|
100
|
+
# Set source shape.
|
101
|
+
# @param [Shape, nil] shape
|
102
|
+
def set_src_shape(shape)
|
103
|
+
@src_shape = shape
|
113
104
|
end
|
114
|
-
alias :
|
105
|
+
alias :src_shape= :set_src_shape
|
115
106
|
|
116
|
-
# Get target shape
|
117
|
-
# @return [
|
118
|
-
def
|
119
|
-
@
|
107
|
+
# Get target shape.
|
108
|
+
# @return [Shape, nil]
|
109
|
+
def get_trg_shape
|
110
|
+
@trg_shape
|
120
111
|
end
|
121
|
-
alias :
|
112
|
+
alias :trg_shape :get_trg_shape
|
122
113
|
|
123
|
-
# Set target shape
|
124
|
-
# @param [
|
125
|
-
def
|
126
|
-
@
|
114
|
+
# Set target shape.
|
115
|
+
# @param [Shape, nil] shape
|
116
|
+
def set_trg_shape(shape)
|
117
|
+
@trg_shape = shape
|
127
118
|
end
|
128
|
-
alias :
|
119
|
+
alias :trg_shape= :set_trg_shape
|
129
120
|
|
130
121
|
# Get source point.
|
131
122
|
# @return [Wx::RealPoint]
|
132
123
|
def get_src_point
|
133
124
|
unless @stand_alone
|
134
|
-
src_shape
|
135
|
-
|
136
|
-
|
137
|
-
if src_shape.get_connection_points.empty?
|
138
|
-
return src_shape.get_border_point(get_mod_src_point, @lst_points.first)
|
125
|
+
if @src_shape && !@lst_points.empty?
|
126
|
+
if @src_shape.get_connection_points.empty?
|
127
|
+
return @src_shape.get_border_point(get_mod_src_point, @lst_points.first)
|
139
128
|
else
|
140
129
|
return get_mod_src_point
|
141
130
|
end
|
@@ -147,8 +136,6 @@ module Wx::SF
|
|
147
136
|
end
|
148
137
|
return pt1
|
149
138
|
end
|
150
|
-
|
151
|
-
return Wx::RealPoint.new
|
152
139
|
end
|
153
140
|
@src_point
|
154
141
|
end
|
@@ -164,11 +151,9 @@ module Wx::SF
|
|
164
151
|
# @return [Wx::RealPoint]
|
165
152
|
def get_trg_point
|
166
153
|
unless @stand_alone
|
167
|
-
trg_shape
|
168
|
-
|
169
|
-
|
170
|
-
if trg_shape.get_connection_points.empty?
|
171
|
-
return trg_shape.get_border_point(get_mod_trg_point, @lst_points.last)
|
154
|
+
if @trg_shape && !@lst_points.empty?
|
155
|
+
if @trg_shape.get_connection_points.empty?
|
156
|
+
return @trg_shape.get_border_point(get_mod_trg_point, @lst_points.last)
|
172
157
|
else
|
173
158
|
return get_mod_trg_point
|
174
159
|
end
|
@@ -180,8 +165,6 @@ module Wx::SF
|
|
180
165
|
end
|
181
166
|
return pt2
|
182
167
|
end
|
183
|
-
|
184
|
-
return Wx::RealPoint.new
|
185
168
|
end
|
186
169
|
@trg_point
|
187
170
|
end
|
@@ -194,7 +177,7 @@ module Wx::SF
|
|
194
177
|
end
|
195
178
|
|
196
179
|
# Get source arrow.
|
197
|
-
# @return [Wx::SF::ArrowBase]
|
180
|
+
# @return [Wx::SF::ArrowBase, nil]
|
198
181
|
def get_src_arrow
|
199
182
|
@src_arrow
|
200
183
|
end
|
@@ -202,22 +185,23 @@ module Wx::SF
|
|
202
185
|
|
203
186
|
# Set source arrow
|
204
187
|
# @overload set_src_arrow(arrow)
|
205
|
-
# @param [Wx::SF::ArrowBase] arrow
|
206
|
-
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if
|
188
|
+
# @param [Wx::SF::ArrowBase, nil] arrow
|
189
|
+
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if valid
|
207
190
|
# @overload set_src_arrow(arrow_klass)
|
208
191
|
# @param [Class] arrow_klass
|
209
|
-
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if
|
192
|
+
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if valid
|
210
193
|
def set_src_arrow(arg)
|
211
|
-
if (arg.is_a?(::Class) && arg < ArrowBase) || arg.is_a?(ArrowBase)
|
212
|
-
@src_arrow = arg.is_a?(ArrowBase) ? arg : arg.new
|
213
|
-
@src_arrow.set_parent_shape(self)
|
194
|
+
if arg.nil? || (arg.is_a?(::Class) && arg < ArrowBase) || arg.is_a?(ArrowBase)
|
195
|
+
@src_arrow = (arg.nil? || arg.is_a?(ArrowBase)) ? arg : arg.new
|
196
|
+
@src_arrow.set_parent_shape(self) if @src_arrow
|
197
|
+
return @src_arrow
|
214
198
|
end
|
215
199
|
nil
|
216
200
|
end
|
217
201
|
alias :src_arrow= :set_src_arrow
|
218
202
|
|
219
203
|
# Get target arrow.
|
220
|
-
# @return [Wx::SF::ArrowBase]
|
204
|
+
# @return [Wx::SF::ArrowBase, nil]
|
221
205
|
def get_trg_arrow
|
222
206
|
@trg_arrow
|
223
207
|
end
|
@@ -225,15 +209,16 @@ module Wx::SF
|
|
225
209
|
|
226
210
|
# Set target arrow
|
227
211
|
# @overload set_trg_arrow(arrow)
|
228
|
-
# @param [Wx::SF::ArrowBase] arrow
|
229
|
-
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if
|
212
|
+
# @param [Wx::SF::ArrowBase, nil] arrow
|
213
|
+
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if valid
|
230
214
|
# @overload set_trg_arrow(arrow_klass)
|
231
215
|
# @param [Class] arrow_klass
|
232
|
-
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if
|
216
|
+
# @return [Wx::SF::ArrowBase,nil] the new source arrow object if valid
|
233
217
|
def set_trg_arrow(arg)
|
234
|
-
if (arg.is_a?(::Class) && arg < ArrowBase) || arg.is_a?(ArrowBase)
|
235
|
-
@trg_arrow = arg.is_a?(ArrowBase) ? arg : arg.new
|
236
|
-
@trg_arrow.set_parent_shape(self)
|
218
|
+
if arg.nil? || (arg.is_a?(::Class) && arg < ArrowBase) || arg.is_a?(ArrowBase)
|
219
|
+
@trg_arrow = (arg.nil? || arg.is_a?(ArrowBase)) ? arg : arg.new
|
220
|
+
@trg_arrow.set_parent_shape(self) if @trg_arrow
|
221
|
+
return @trg_arrow
|
237
222
|
end
|
238
223
|
nil
|
239
224
|
end
|
@@ -242,14 +227,23 @@ module Wx::SF
|
|
242
227
|
# Get line type
|
243
228
|
# @return [Wx::Pen]
|
244
229
|
def get_line_pen
|
245
|
-
@pen
|
230
|
+
@pen || (@diagram&.shape_canvas ? @diagram.shape_canvas.line_pen : DEFAULT.pen)
|
246
231
|
end
|
247
232
|
alias :line_pen :get_line_pen
|
248
233
|
|
249
234
|
# Set line type
|
250
|
-
# @
|
251
|
-
|
252
|
-
|
235
|
+
# @overload set_line_pen(pen)
|
236
|
+
# @param [Wx::Pen] pen
|
237
|
+
# @overload set_line_pen(color, width=1, style=Wx::PenStyle::PENSTYLE_SOLID)
|
238
|
+
# @param [Wx::Colour,String,Symbol] color
|
239
|
+
# @param [Integer] width
|
240
|
+
# @param [Wx::PenStyle] style
|
241
|
+
def set_line_pen(*args)
|
242
|
+
@pen = if args.size == 1 && Wx::Pen === args.first
|
243
|
+
args.first
|
244
|
+
else
|
245
|
+
Wx::Pen.new(*args)
|
246
|
+
end
|
253
247
|
end
|
254
248
|
alias :line_pen= :set_line_pen
|
255
249
|
|
@@ -288,16 +282,13 @@ module Wx::SF
|
|
288
282
|
if @stand_alone
|
289
283
|
return [@src_point, @trg_point]
|
290
284
|
else
|
291
|
-
src_shape
|
292
|
-
trg_shape = get_diagram.find_shape(@trg_shape_id)
|
293
|
-
|
294
|
-
if src_shape && trg_shape
|
285
|
+
if @src_shape && @trg_shape
|
295
286
|
trg_center = get_mod_trg_point
|
296
287
|
src_center = get_mod_src_point
|
297
288
|
|
298
|
-
if src_shape.get_parent_shape == trg_shape || trg_shape.get_parent_shape == src_shape
|
299
|
-
trg_bb = trg_shape.get_bounding_box
|
300
|
-
src_bb = src_shape.get_bounding_box
|
289
|
+
if @src_shape.get_parent_shape == @trg_shape || @trg_shape.get_parent_shape == @src_shape
|
290
|
+
trg_bb = @trg_shape.get_bounding_box
|
291
|
+
src_bb = @src_shape.get_bounding_box
|
301
292
|
|
302
293
|
if trg_bb.contains?(src_center.x.to_i, src_center.y.to_i)
|
303
294
|
if src_center.y > trg_center.y
|
@@ -320,21 +311,21 @@ module Wx::SF
|
|
320
311
|
end
|
321
312
|
end
|
322
313
|
|
323
|
-
if src_shape.get_connection_points.empty?
|
324
|
-
src = src_shape.get_border_point(src_center, trg_center)
|
314
|
+
if @src_shape.get_connection_points.empty?
|
315
|
+
src = @src_shape.get_border_point(src_center, trg_center)
|
325
316
|
else
|
326
317
|
src = src_center
|
327
318
|
end
|
328
319
|
|
329
|
-
if trg_shape.get_connection_points.empty?
|
330
|
-
trg = trg_shape.get_border_point(trg_center, src_center)
|
320
|
+
if @trg_shape.get_connection_points.empty?
|
321
|
+
trg = @trg_shape.get_border_point(trg_center, src_center)
|
331
322
|
else
|
332
323
|
trg = trg_center
|
333
324
|
end
|
334
325
|
return [src, trg]
|
335
326
|
end
|
336
327
|
end
|
337
|
-
|
328
|
+
raise SFException, 'Missing src and/or trg for line'
|
338
329
|
end
|
339
330
|
|
340
331
|
# Get a list of the line's control points (their positions).
|
@@ -367,7 +358,7 @@ module Wx::SF
|
|
367
358
|
# Initialize line's starting point with existing fixed connection point.
|
368
359
|
# @param [Wx::SF::ConnectionPoint] cp Pointer to connection point
|
369
360
|
def set_starting_connection_point(cp)
|
370
|
-
if cp
|
361
|
+
if cp&.get_parent_shape
|
371
362
|
pos_cp = cp.get_connection_point
|
372
363
|
rct_bb = cp.get_parent_shape.get_bounding_box
|
373
364
|
|
@@ -379,7 +370,7 @@ module Wx::SF
|
|
379
370
|
# Initialize line's ending point with existing fixed connection point.
|
380
371
|
# @param [Wx::SF::ConnectionPoint] cp Pointer to connection point
|
381
372
|
def set_ending_connection_point(cp)
|
382
|
-
if cp
|
373
|
+
if cp&.get_parent_shape
|
383
374
|
pos_cp = cp.get_connection_point
|
384
375
|
rct_bb = cp.get_parent_shape.get_bounding_box
|
385
376
|
|
@@ -404,11 +395,11 @@ module Wx::SF
|
|
404
395
|
return get_direct_line if index == 0
|
405
396
|
else
|
406
397
|
if index == 0
|
407
|
-
return [get_src_point, @lst_points.first
|
398
|
+
return [get_src_point, @lst_points.first]
|
408
399
|
elsif index == @lst_points.size
|
409
|
-
return [@lst_points.last
|
400
|
+
return [@lst_points.last, get_trg_point]
|
410
401
|
elsif index > 0 && index < @lst_points.size
|
411
|
-
return @lst_points[index-1, 2].collect {|p| p
|
402
|
+
return @lst_points[index-1, 2].collect {|p| p}
|
412
403
|
end
|
413
404
|
end
|
414
405
|
[Wx::RealPoint.new, Wx::RealPoint.new]
|
@@ -421,18 +412,19 @@ module Wx::SF
|
|
421
412
|
|
422
413
|
# calculate control points area if they exist
|
423
414
|
if !@lst_points.empty?
|
424
|
-
prev_pt = get_src_point
|
415
|
+
prev_pt = get_src_point.to_point
|
425
416
|
|
426
417
|
@lst_points.each do |pt|
|
418
|
+
pt = pt.to_point
|
427
419
|
if line_rct.nil?
|
428
|
-
line_rct = Wx::Rect.new(prev_pt
|
420
|
+
line_rct = Wx::Rect.new(prev_pt, pt)
|
429
421
|
else
|
430
|
-
line_rct.union!(Wx::Rect.new(prev_pt
|
422
|
+
line_rct.union!(Wx::Rect.new(prev_pt, pt))
|
431
423
|
end
|
432
424
|
prev_pt = pt
|
433
425
|
end
|
434
426
|
|
435
|
-
line_rct.union!(Wx::Rect.new(prev_pt
|
427
|
+
line_rct.union!(Wx::Rect.new(prev_pt, get_trg_point.to_point))
|
436
428
|
else
|
437
429
|
# include starting point
|
438
430
|
pt = get_src_point
|
@@ -558,19 +550,22 @@ module Wx::SF
|
|
558
550
|
def on_end_handle(handle)
|
559
551
|
# update percentual offset of the line's ending points
|
560
552
|
parent = get_parent_canvas.get_shape_under_cursor
|
561
|
-
|
553
|
+
# propagate request for interactive connection editing if requested
|
554
|
+
while parent && parent.has_style?(Shape::STYLE::PROPAGATE_INTERACTIVE_CONNECTION)
|
555
|
+
parent = parent.get_parent_shape
|
556
|
+
end
|
557
|
+
|
562
558
|
if parent && !@stand_alone
|
563
559
|
bb_rect = parent.get_bounding_box
|
564
|
-
|
565
560
|
case handle.type
|
566
561
|
when Shape::Handle::TYPE::LINESTART
|
567
|
-
if parent
|
562
|
+
if parent == @src_shape
|
568
563
|
@src_offset.x = (handle.get_position.x - bb_rect.left).to_f / bb_rect.width
|
569
564
|
@src_offset.y = (handle.get_position.y - bb_rect.top).to_f / bb_rect.height
|
570
565
|
end
|
571
566
|
|
572
567
|
when Shape::Handle::TYPE::LINEEND
|
573
|
-
if parent
|
568
|
+
if parent == @trg_shape
|
574
569
|
@trg_offset.x = (handle.get_position.x - bb_rect.left).to_f / bb_rect.width
|
575
570
|
@trg_offset.y = (handle.get_position.y - bb_rect.top).to_f / bb_rect.height
|
576
571
|
end
|
@@ -587,7 +582,7 @@ module Wx::SF
|
|
587
582
|
# @param [Wx::Point] pos Current mouse position
|
588
583
|
# @see Wx::SF::ShapeCanvas
|
589
584
|
def on_begin_drag(pos)
|
590
|
-
@prev_position = get_absolute_position
|
585
|
+
@prev_position = get_absolute_position.dup
|
591
586
|
|
592
587
|
super
|
593
588
|
end
|
@@ -608,7 +603,7 @@ module Wx::SF
|
|
608
603
|
if handle && handle.get_parent_shape == self
|
609
604
|
if handle.type == Shape::Handle::TYPE::LINECTRL
|
610
605
|
if has_style?(STYLE::EMIT_EVENTS)
|
611
|
-
evt = Wx::SF::ShapeHandleEvent.new(EVT_SF_LINE_HANDLE_REMOVE,
|
606
|
+
evt = Wx::SF::ShapeHandleEvent.new(EVT_SF_LINE_HANDLE_REMOVE, self.object_id)
|
612
607
|
evt.set_shape(self)
|
613
608
|
evt.set_handle(handle)
|
614
609
|
get_parent_canvas.get_event_handler.process_event(evt)
|
@@ -630,7 +625,7 @@ module Wx::SF
|
|
630
625
|
if has_style?(STYLE::EMIT_EVENTS)
|
631
626
|
handle = get_parent_canvas.get_topmost_handle_at_position(pos)
|
632
627
|
if handle
|
633
|
-
evt = ShapeHandleEvent.new(EVT_SF_LINE_HANDLE_ADD,
|
628
|
+
evt = ShapeHandleEvent.new(EVT_SF_LINE_HANDLE_ADD, self.object_id)
|
634
629
|
evt.set_shape(this)
|
635
630
|
evt.set_handle(handle)
|
636
631
|
get_parent_canvas.get_event_handler.process_event(evt)
|
@@ -646,7 +641,7 @@ module Wx::SF
|
|
646
641
|
# @param [Float] x Horizontal scale factor
|
647
642
|
# @param [Float] y Vertical scale factor
|
648
643
|
# @param [Boolean] children true if the shape's children should be scaled as well, otherwise the shape will be updated after scaling via update() function.
|
649
|
-
def scale(x, y, children
|
644
|
+
def scale(x, y, children: WITHCHILDREN)
|
650
645
|
@lst_points.each do |pt|
|
651
646
|
pt.x *= x
|
652
647
|
pt.y *= y
|
@@ -668,16 +663,16 @@ module Wx::SF
|
|
668
663
|
# Draw the shape in the normal way. The function can be overridden if necessary.
|
669
664
|
# @param [Wx::DC] dc Reference to device context where the shape will be drawn to
|
670
665
|
def draw_normal(dc)
|
671
|
-
dc.with_pen(
|
666
|
+
dc.with_pen(line_pen) do
|
672
667
|
draw_complete_line(dc)
|
673
668
|
end
|
674
669
|
end
|
675
670
|
|
676
|
-
# Draw the shape in the
|
671
|
+
# Draw the shape in the hover mode (the mouse cursor is above the shape).
|
677
672
|
# The function can be overridden if necessary.
|
678
673
|
# @param [Wx::DC] dc Reference to device context where the shape will be drawn to
|
679
674
|
def draw_hover(dc)
|
680
|
-
dc.with_pen(Wx::Pen.new(
|
675
|
+
dc.with_pen(Wx::Pen.new(hover_colour, 1)) do
|
681
676
|
draw_complete_line(dc)
|
682
677
|
end
|
683
678
|
end
|
@@ -687,7 +682,7 @@ module Wx::SF
|
|
687
682
|
# The function can be overridden if necessary.
|
688
683
|
# @param [Wx::DC] dc Reference to device context where the shape will be drawn to
|
689
684
|
def draw_highlighted(dc)
|
690
|
-
dc.with_pen(Wx::Pen.new(
|
685
|
+
dc.with_pen(Wx::Pen.new(hover_colour, 2)) do
|
691
686
|
draw_complete_line(dc)
|
692
687
|
end
|
693
688
|
end
|
@@ -699,23 +694,21 @@ module Wx::SF
|
|
699
694
|
|
700
695
|
case @mode
|
701
696
|
when LINEMODE::READY
|
702
|
-
# draw
|
703
|
-
|
704
|
-
|
697
|
+
# draw line parts
|
698
|
+
n = line_segment_count-1
|
699
|
+
(0..n).each do |i|
|
705
700
|
src, trg = get_line_segment(i)
|
701
|
+
# at starting (src) segment draw src arrow and get updated arrow connection point
|
702
|
+
src = @src_arrow.draw(trg, src, dc) if i == 0 && @src_arrow
|
703
|
+
# at end (tgt) segment draw tgt arrow and get updated connection point
|
704
|
+
trg = @trg_arrow.draw(src, trg, dc) if i == n && @trg_arrow
|
705
|
+
# draw line segment
|
706
706
|
dc.draw_line(src.to_point, trg.to_point)
|
707
707
|
end
|
708
|
-
# draw target arrow
|
709
|
-
@trg_arrow.draw(src, trg, dc) if @trg_arrow
|
710
|
-
# draw source arrow
|
711
|
-
if @src_arrow
|
712
|
-
src, trg = get_line_segment(0)
|
713
|
-
@src_arrow.draw(trg, src, dc)
|
714
|
-
end
|
715
708
|
|
716
709
|
when LINEMODE::UNDERCONSTRUCTION
|
717
710
|
# draw basic line parts
|
718
|
-
|
711
|
+
trg = nil
|
719
712
|
@lst_points.size.times do |i|
|
720
713
|
src, trg = get_line_segment(i)
|
721
714
|
dc.draw_line(src.to_point, trg.to_point)
|
@@ -723,12 +716,11 @@ module Wx::SF
|
|
723
716
|
# draw unfinished line segment if any (for interactive line creation)
|
724
717
|
dc.with_pen(Wx::Pen.new(Wx::BLACK, 1, Wx::PENSTYLE_DOT)) do
|
725
718
|
if @lst_points.size > 0
|
726
|
-
dc.draw_line(trg, @unfinished_point)
|
719
|
+
dc.draw_line(trg.to_point, @unfinished_point)
|
727
720
|
else
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
dc.draw_line((src_shape.get_border_point(src_shape.get_center, @unfinished_point.to_real)).to_point,
|
721
|
+
if @src_shape
|
722
|
+
if @src_shape.get_connection_points.empty?
|
723
|
+
dc.draw_line((@src_shape.get_border_point(@src_shape.get_center, @unfinished_point.to_real)).to_point,
|
732
724
|
@unfinished_point)
|
733
725
|
else
|
734
726
|
dc.draw_line(get_mod_src_point.to_point, @unfinished_point)
|
@@ -739,14 +731,13 @@ module Wx::SF
|
|
739
731
|
|
740
732
|
when LINEMODE::SRCCHANGE
|
741
733
|
# draw basic line parts
|
742
|
-
src = trg = nil
|
743
734
|
@lst_points.size.times do |i|
|
744
735
|
src, trg = get_line_segment(i+1)
|
745
736
|
dc.draw_line(src.to_point, trg.to_point)
|
746
737
|
end
|
747
738
|
|
748
739
|
# draw linesegment being updated
|
749
|
-
|
740
|
+
_, trg = get_line_segment(0)
|
750
741
|
|
751
742
|
dc.set_pen(Wx::Pen.new(Wx::BLACK, 1, Wx::PENSTYLE_DOT)) unless @stand_alone
|
752
743
|
dc.draw_line(@unfinished_point, trg.to_point)
|
@@ -754,7 +745,7 @@ module Wx::SF
|
|
754
745
|
|
755
746
|
when LINEMODE::TRGCHANGE
|
756
747
|
# draw basic line parts
|
757
|
-
|
748
|
+
trg = nil
|
758
749
|
if @lst_points.empty?
|
759
750
|
trg = get_src_point
|
760
751
|
else
|
@@ -817,20 +808,19 @@ module Wx::SF
|
|
817
808
|
# Get modified starting line point .
|
818
809
|
# @return [Wx::RealPoint] Modified starting line point
|
819
810
|
def get_mod_src_point
|
820
|
-
|
821
|
-
return Wx::RealPoint.new unless src_shape
|
811
|
+
return Wx::RealPoint.new unless @src_shape
|
822
812
|
|
823
813
|
if @src_offset != DEFAULT::OFFSET
|
824
|
-
bb_rct = src_shape.get_bounding_box
|
825
|
-
mod_point = src_shape.get_absolute_position
|
814
|
+
bb_rct = @src_shape.get_bounding_box
|
815
|
+
mod_point = @src_shape.get_absolute_position.dup
|
826
816
|
|
827
817
|
mod_point.x += bb_rct.width.to_f * @src_offset.x
|
828
818
|
mod_point.y += bb_rct.height.to_f * @src_offset.y
|
829
819
|
else
|
830
|
-
mod_point = src_shape.get_center
|
820
|
+
mod_point = @src_shape.get_center
|
831
821
|
end
|
832
822
|
|
833
|
-
conn_pt = src_shape.get_nearest_connection_point(mod_point)
|
823
|
+
conn_pt = @src_shape.get_nearest_connection_point(mod_point)
|
834
824
|
mod_point = conn_pt.get_connection_point if conn_pt
|
835
825
|
|
836
826
|
mod_point
|
@@ -839,20 +829,19 @@ module Wx::SF
|
|
839
829
|
# Get modified ending line point .
|
840
830
|
# @return [Wx::RealPoint] Modified ending line point
|
841
831
|
def get_mod_trg_point
|
842
|
-
|
843
|
-
return Wx::RealPoint.new unless trg_shape
|
832
|
+
return Wx::RealPoint.new unless @trg_shape
|
844
833
|
|
845
834
|
if @trg_offset != DEFAULT::OFFSET
|
846
|
-
bb_rct = trg_shape.get_bounding_box
|
847
|
-
mod_point = trg_shape.get_absolute_position
|
835
|
+
bb_rct = @trg_shape.get_bounding_box
|
836
|
+
mod_point = @trg_shape.get_absolute_position.dup
|
848
837
|
|
849
838
|
mod_point.x += bb_rct.width.to_f * @trg_offset.x
|
850
839
|
mod_point.y += bb_rct.height.to_f * @trg_offset.y
|
851
840
|
else
|
852
|
-
mod_point = trg_shape.get_center
|
841
|
+
mod_point = @trg_shape.get_center
|
853
842
|
end
|
854
843
|
|
855
|
-
conn_pt = trg_shape.get_nearest_connection_point(mod_point)
|
844
|
+
conn_pt = @trg_shape.get_nearest_connection_point(mod_point)
|
856
845
|
mod_point = conn_pt.get_connection_point if conn_pt
|
857
846
|
|
858
847
|
mod_point
|
@@ -902,6 +891,11 @@ module Wx::SF
|
|
902
891
|
@trg_point
|
903
892
|
end
|
904
893
|
|
894
|
+
def serialize_line_pen(*val)
|
895
|
+
@pen = val.first unless val.empty?
|
896
|
+
@pen
|
897
|
+
end
|
898
|
+
|
905
899
|
end
|
906
900
|
|
907
901
|
end
|