wxruby3-shapes 0.9.0.pre.beta.3
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/.yardopts +12 -0
- data/CREDITS.md +18 -0
- data/INSTALL.md +39 -0
- data/LICENSE +21 -0
- data/README.md +118 -0
- data/assets/screenshot.png +0 -0
- data/bin/wx-shapes +9 -0
- data/lib/wx/shapes/arrow_base.rb +86 -0
- data/lib/wx/shapes/arrows/circle_arrow.rb +39 -0
- data/lib/wx/shapes/arrows/diamond_arrow.rb +33 -0
- data/lib/wx/shapes/arrows/open_arrow.rb +56 -0
- data/lib/wx/shapes/arrows/solid_arrow.rb +69 -0
- data/lib/wx/shapes/art/shape_canvas/page.xpm +73 -0
- data/lib/wx/shapes/auto_layout.rb +358 -0
- data/lib/wx/shapes/base.rb +33 -0
- data/lib/wx/shapes/canvas_history.rb +84 -0
- data/lib/wx/shapes/connection_point.rb +238 -0
- data/lib/wx/shapes/core.rb +19 -0
- data/lib/wx/shapes/diagram.rb +659 -0
- data/lib/wx/shapes/events.rb +389 -0
- data/lib/wx/shapes/printout.rb +136 -0
- data/lib/wx/shapes/serializable.rb +440 -0
- data/lib/wx/shapes/serialize/core.rb +40 -0
- data/lib/wx/shapes/serialize/id.rb +82 -0
- data/lib/wx/shapes/serialize/wx.rb +104 -0
- data/lib/wx/shapes/serializer/json.rb +258 -0
- data/lib/wx/shapes/serializer/yaml.rb +125 -0
- data/lib/wx/shapes/shape.rb +2129 -0
- data/lib/wx/shapes/shape_canvas.rb +3285 -0
- data/lib/wx/shapes/shape_data_object.rb +43 -0
- data/lib/wx/shapes/shape_handle.rb +287 -0
- data/lib/wx/shapes/shape_list.rb +161 -0
- data/lib/wx/shapes/shapes/bitmap_shape.rb +257 -0
- data/lib/wx/shapes/shapes/circle_shape.rb +136 -0
- data/lib/wx/shapes/shapes/control_shape.rb +483 -0
- data/lib/wx/shapes/shapes/curve_shape.rb +231 -0
- data/lib/wx/shapes/shapes/diamond_shape.rb +62 -0
- data/lib/wx/shapes/shapes/edit_text_shape.rb +317 -0
- data/lib/wx/shapes/shapes/ellipse_shape.rb +106 -0
- data/lib/wx/shapes/shapes/flex_grid_shape.rb +78 -0
- data/lib/wx/shapes/shapes/grid_shape.rb +404 -0
- data/lib/wx/shapes/shapes/line_shape.rb +907 -0
- data/lib/wx/shapes/shapes/multi_sel_rect.rb +214 -0
- data/lib/wx/shapes/shapes/ortho_shape.rb +357 -0
- data/lib/wx/shapes/shapes/polygon_shape.rb +294 -0
- data/lib/wx/shapes/shapes/rect_shape.rb +378 -0
- data/lib/wx/shapes/shapes/round_ortho_shape.rb +131 -0
- data/lib/wx/shapes/shapes/round_rect_shape.rb +142 -0
- data/lib/wx/shapes/shapes/square_shape.rb +119 -0
- data/lib/wx/shapes/shapes/text_shape.rb +324 -0
- data/lib/wx/shapes/thumbnail.rb +234 -0
- data/lib/wx/shapes/version.rb +12 -0
- data/lib/wx/shapes/wx.rb +29 -0
- data/lib/wx/shapes.rb +18 -0
- data/lib/wx/wx-shapes/base.rb +87 -0
- data/lib/wx/wx-shapes/cmd/sampler.rb +58 -0
- data/lib/wx/wx-shapes/cmd/test.rb +27 -0
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +7 -0
- data/rakelib/yard/templates/default/layout/html/setup.rb +5 -0
- data/rakelib/yard/yard/relative_markdown_links/version.rb +8 -0
- data/rakelib/yard/yard/relative_markdown_links.rb +39 -0
- data/rakelib/yard/yard-custom-templates.rb +2 -0
- data/rakelib/yard/yard-relative_markdown_links.rb +4 -0
- data/samples/demo/art/AlignBottom.xpm +35 -0
- data/samples/demo/art/AlignCenter.xpm +35 -0
- data/samples/demo/art/AlignLeft.xpm +35 -0
- data/samples/demo/art/AlignMiddle.xpm +35 -0
- data/samples/demo/art/AlignRight.xpm +35 -0
- data/samples/demo/art/AlignTop.xpm +35 -0
- data/samples/demo/art/Bitmap.xpm +25 -0
- data/samples/demo/art/Circle.xpm +22 -0
- data/samples/demo/art/Curve.xpm +21 -0
- data/samples/demo/art/Diamond.xpm +22 -0
- data/samples/demo/art/EditText.xpm +21 -0
- data/samples/demo/art/Ellipse.xpm +22 -0
- data/samples/demo/art/FixedRect.xpm +22 -0
- data/samples/demo/art/FlexGrid.xpm +22 -0
- data/samples/demo/art/GC.xpm +23 -0
- data/samples/demo/art/Grid.xpm +22 -0
- data/samples/demo/art/Line.xpm +21 -0
- data/samples/demo/art/NoSource.xpm +69 -0
- data/samples/demo/art/OrthoLine.xpm +21 -0
- data/samples/demo/art/Rect.xpm +22 -0
- data/samples/demo/art/RoundOrthoLine.xpm +21 -0
- data/samples/demo/art/RoundRect.xpm +22 -0
- data/samples/demo/art/Shadow.xpm +23 -0
- data/samples/demo/art/StandAloneLine.xpm +22 -0
- data/samples/demo/art/Text.xpm +21 -0
- data/samples/demo/art/Tool.xpm +23 -0
- data/samples/demo/art/sample.xpm +251 -0
- data/samples/demo/demo.rb +658 -0
- data/samples/demo/frame_canvas.rb +422 -0
- data/samples/demo/images/motyl.bmp +0 -0
- data/samples/demo/images/motyl2.bmp +0 -0
- data/samples/sample1/art/sample.xpm +251 -0
- data/samples/sample1/sample.rb +263 -0
- data/samples/sample2/art/sample.xpm +251 -0
- data/samples/sample2/sample.rb +133 -0
- data/samples/sample2/sample_canvas.rb +35 -0
- data/samples/sample2/sample_shape.rb +108 -0
- data/samples/sample3/art/sample.xpm +251 -0
- data/samples/sample3/sample.rb +281 -0
- data/samples/sample4/art/sample.xpm +251 -0
- data/samples/sample4/sample.rb +180 -0
- data/tests/art/motyl.bmp +0 -0
- data/tests/lib/wxapp_runner.rb +64 -0
- data/tests/serializer_tests.rb +521 -0
- data/tests/test_grid_shapes.rb +42 -0
- data/tests/test_serialize.rb +7 -0
- data/tests/test_serialize_yaml.rb +17 -0
- metadata +242 -0
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
# Wx::SF - Demo ThumbFrame, MainFrame and App
|
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
3
|
+
|
|
4
|
+
require 'wx/shapes'
|
|
5
|
+
require_relative './frame_canvas'
|
|
6
|
+
|
|
7
|
+
class ThumbFrame < Wx::Frame
|
|
8
|
+
|
|
9
|
+
def initialize(parent, title: 'Thumbnail', size: Wx::Size.new( 200,150 ), style: Wx::CAPTION|Wx::FRAME_FLOAT_ON_PARENT|Wx::FRAME_TOOL_WINDOW|Wx::RESIZE_BORDER|Wx::TAB_TRAVERSAL)
|
|
10
|
+
super
|
|
11
|
+
|
|
12
|
+
set_size_hints(Wx::DEFAULT_SIZE)
|
|
13
|
+
|
|
14
|
+
main_sizer = Wx::VBoxSizer.new
|
|
15
|
+
|
|
16
|
+
@thumbnail = Wx::SF::Thumbnail.new(self)
|
|
17
|
+
main_sizer.add(@thumbnail, 1, Wx::EXPAND, 0)
|
|
18
|
+
|
|
19
|
+
set_sizer(main_sizer)
|
|
20
|
+
layout
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_reader :thumbnail
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class MainFrame < Wx::Frame
|
|
28
|
+
|
|
29
|
+
class MODE < Wx::Enum
|
|
30
|
+
DESIGN = self.new(0)
|
|
31
|
+
RECT = self.new(1)
|
|
32
|
+
FIXEDRECT = self.new(2)
|
|
33
|
+
ROUNDRECT = self.new(3)
|
|
34
|
+
ELLIPSE = self.new(4)
|
|
35
|
+
CIRCLE = self.new(5)
|
|
36
|
+
DIAMOND = self.new(6)
|
|
37
|
+
TEXT = self.new(7)
|
|
38
|
+
EDITTEXT = self.new(8)
|
|
39
|
+
BITMAP = self.new(9)
|
|
40
|
+
LINE = self.new(10)
|
|
41
|
+
CURVE = self.new(11)
|
|
42
|
+
ORTHOLINE = self.new(12)
|
|
43
|
+
ROUNDORTHOLINE = self.new(13)
|
|
44
|
+
GRID = self.new(14)
|
|
45
|
+
FLEXGRID = self.new(15)
|
|
46
|
+
STANDALONELINE = self.new(16)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
module ID
|
|
50
|
+
include Wx::IDHelper
|
|
51
|
+
|
|
52
|
+
# menu IDs
|
|
53
|
+
#---------------------------------------------------------------#
|
|
54
|
+
M_SAVEASBITMAP = self.next_id
|
|
55
|
+
|
|
56
|
+
# tool IDs
|
|
57
|
+
#---------------------------------------------------------------#
|
|
58
|
+
T_FIRST_TOOLMARKER = self.next_id
|
|
59
|
+
T_GRID = self.next_id
|
|
60
|
+
T_SHADOW = self.next_id
|
|
61
|
+
T_GC = self.next_id
|
|
62
|
+
T_TOOL = self.next_id
|
|
63
|
+
T_RECTSHP = self.next_id
|
|
64
|
+
T_SQUARESHP = self.next_id
|
|
65
|
+
T_RNDRECTSHP = self.next_id
|
|
66
|
+
T_ELLIPSESHP = self.next_id
|
|
67
|
+
T_CIRCLESHP = self.next_id
|
|
68
|
+
T_DIAMONDSHP = self.next_id
|
|
69
|
+
T_TEXTSHP = self.next_id
|
|
70
|
+
T_EDITTEXTSHP = self.next_id
|
|
71
|
+
T_BITMAPSHP = self.next_id
|
|
72
|
+
T_GRIDSHP = self.next_id
|
|
73
|
+
T_FLEXGRIDSHP = self.next_id
|
|
74
|
+
T_LINESHP = self.next_id
|
|
75
|
+
T_STANDALONELINESHP = self.next_id
|
|
76
|
+
T_CURVESHP = self.next_id
|
|
77
|
+
T_ORTHOSHP = self.next_id
|
|
78
|
+
T_RNDORTHOSHP = self.next_id
|
|
79
|
+
T_ALIGN_LEFT = self.next_id
|
|
80
|
+
T_ALIGN_RIGHT = self.next_id
|
|
81
|
+
T_ALIGN_TOP = self.next_id
|
|
82
|
+
T_ALIGN_BOTTOM = self.next_id
|
|
83
|
+
T_ALIGN_MIDDLE = self.next_id
|
|
84
|
+
T_ALIGN_CENTER = self.next_id
|
|
85
|
+
|
|
86
|
+
T_LAST_TOOLMARKER = self.next_id
|
|
87
|
+
|
|
88
|
+
M_AUTOLAYOUT_FIRST = self.next_id
|
|
89
|
+
M_AUTOLAYOUT_LAST = M_AUTOLAYOUT_FIRST + 100
|
|
90
|
+
|
|
91
|
+
# other controls
|
|
92
|
+
#---------------------------------------------------------------#
|
|
93
|
+
T_COLORPICKER = self.next_id(M_AUTOLAYOUT_LAST) + 1
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def initialize(parent, title: 'wxShapeFramework Demo Application', style: Wx::CLOSE_BOX|Wx::DEFAULT_FRAME_STYLE|Wx::RESIZE_BORDER|Wx::TAB_TRAVERSAL)
|
|
97
|
+
super
|
|
98
|
+
|
|
99
|
+
set_icon(Wx::Icon(:sample))
|
|
100
|
+
|
|
101
|
+
setup_frame
|
|
102
|
+
|
|
103
|
+
@file_menu.append(Wx::ID_NEW, "&New\tCtrl+N", "New chart", Wx::ITEM_NORMAL)
|
|
104
|
+
@file_menu.append(Wx::ID_OPEN, "&Open\tCtrl+O", "Load a chart from file", Wx::ITEM_NORMAL)
|
|
105
|
+
@file_menu.append(Wx::ID_SAVE, "&Save as...\tCtrl+Shift+S", "Save the chart to file", Wx::ITEM_NORMAL)
|
|
106
|
+
@file_menu.append_separator
|
|
107
|
+
@file_menu.append(ID::M_SAVEASBITMAP, "&Export to image...", "Export the chart to BMP file", Wx::ITEM_NORMAL)
|
|
108
|
+
@file_menu.append_separator
|
|
109
|
+
@file_menu.append(Wx::ID_PRINT, "&Print...\tCtrl+P", "Open print dialog", Wx::ITEM_NORMAL)
|
|
110
|
+
@file_menu.append(Wx::ID_PREVIEW, "Print pre&view...\tAlt+P", "Open print preview window", Wx::ITEM_NORMAL)
|
|
111
|
+
@file_menu.append(Wx::ID_PAGE_SETUP, "Pa&ge setup...", "Set print page properties", Wx::ITEM_NORMAL)
|
|
112
|
+
@file_menu.append_separator
|
|
113
|
+
@file_menu.append(Wx::ID_EXIT, "E&xit\tAlt+X", "Close application", Wx::ITEM_NORMAL)
|
|
114
|
+
|
|
115
|
+
@edit_menu.append(Wx::ID_UNDO, "&Undo\tCtrl+Z", "Discard previous action", Wx::ITEM_NORMAL)
|
|
116
|
+
@edit_menu.append(Wx::ID_REDO, "&Redo\tCtrl+Y", "Re-do previously discarded action", Wx::ITEM_NORMAL)
|
|
117
|
+
@edit_menu.append_separator
|
|
118
|
+
@edit_menu.append(Wx::ID_SELECTALL, "Select &all\tCtrl+A", "Select all shapes", Wx::ITEM_NORMAL)
|
|
119
|
+
@edit_menu.append_separator
|
|
120
|
+
@edit_menu.append(Wx::ID_COPY, "&Copy\tCtrl+C", "Copy shapes to the clipboard", Wx::ITEM_NORMAL)
|
|
121
|
+
@edit_menu.append(Wx::ID_CUT, "Cu&t\tCtrl+X", "Cut shapes to the clipboard", Wx::ITEM_NORMAL)
|
|
122
|
+
@edit_menu.append(Wx::ID_PASTE, "&Paste\tCtrl+V", "Paste shapes to the canvas", Wx::ITEM_NORMAL)
|
|
123
|
+
|
|
124
|
+
Wx::SF::AutoLayout.layout_algorithms.each_with_index do |la_name, i|
|
|
125
|
+
@auto_layout_menu.append(ID::M_AUTOLAYOUT_FIRST + i, la_name)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
@help_menu.append(Wx::ID_ABOUT, '&About...', 'About application...', Wx::ITEM_NORMAL)
|
|
129
|
+
|
|
130
|
+
# set shape canvas and associate it with diagram
|
|
131
|
+
@diagram = Wx::SF::Diagram.new
|
|
132
|
+
@shape_canvas = FrameCanvas.new(@diagram, @canvas_panel, Wx::ID_ANY)
|
|
133
|
+
@canvas_sizer.add(@shape_canvas, 1, Wx::EXPAND, 0)
|
|
134
|
+
@canvas_panel.layout
|
|
135
|
+
# enable using Wx::GraphicsContext by default
|
|
136
|
+
# (effective only if wxUSE_GRAPHICS_CONTEXT if set to 1 for wxRuby)
|
|
137
|
+
Wx::SF::ShapeCanvas::enable_gc
|
|
138
|
+
|
|
139
|
+
# create and show canvas thumbnail
|
|
140
|
+
@thumb_frm = ThumbFrame.new(self)
|
|
141
|
+
@thumb_frm.thumbnail.set_canvas(@shape_canvas)
|
|
142
|
+
@thumb_frm.show
|
|
143
|
+
|
|
144
|
+
# create colour picker
|
|
145
|
+
if Wx::PLATFORM == 'WXMSW'
|
|
146
|
+
@cpicker = Wx::ColourPickerCtrl.new(@tool_bar, ID::T_COLORPICKER, Wx::Colour.new(120, 120, 255), Wx::DEFAULT_POSITION, Wx::Size.new(22, 22))
|
|
147
|
+
else
|
|
148
|
+
@cpicker = Wx::ColourPickerCtrl.new(@tool_bar, ID::T_COLORPICKER, Wx::Colour.new(120, 120, 255), Wx::DEFAULT_POSITION, Wx::Size.new(28, 28))
|
|
149
|
+
end
|
|
150
|
+
@cpicker.set_tool_tip('Set hover color')
|
|
151
|
+
|
|
152
|
+
# add m_pToolBar tools
|
|
153
|
+
@tool_bar.set_tool_bitmap_size([16, 15])
|
|
154
|
+
@tool_bar.add_tool(Wx::ID_NEW, 'New', Wx::ArtProvider.get_bitmap(Wx::ART_NEW, Wx::ART_MENU), 'New diagram')
|
|
155
|
+
@tool_bar.add_tool(Wx::ID_OPEN, 'Load', Wx::ArtProvider.get_bitmap(Wx::ART_FILE_OPEN, Wx::ART_MENU), 'Open file...')
|
|
156
|
+
@tool_bar.add_tool(Wx::ID_SAVE, 'Save', Wx::ArtProvider.get_bitmap(Wx::ART_FILE_SAVE, Wx::ART_MENU), 'Save file...')
|
|
157
|
+
@tool_bar.add_separator
|
|
158
|
+
@tool_bar.add_tool(Wx::ID_PRINT, 'Print', Wx::ArtProvider.get_bitmap(Wx::ART_PRINT, Wx::ART_MENU), 'Print...')
|
|
159
|
+
@tool_bar.add_tool(Wx::ID_PREVIEW, 'Preview', Wx::ArtProvider.get_bitmap(Wx::ART_FIND, Wx::ART_MENU), 'Print preview...')
|
|
160
|
+
@tool_bar.add_separator
|
|
161
|
+
@tool_bar.add_tool(Wx::ID_COPY, 'Copy', Wx::ArtProvider.get_bitmap(Wx::ART_COPY, Wx::ART_MENU), 'Copy to clipboard')
|
|
162
|
+
@tool_bar.add_tool(Wx::ID_CUT, 'Cut', Wx::ArtProvider.get_bitmap(Wx::ART_CUT, Wx::ART_MENU), 'Cut to clipboard')
|
|
163
|
+
@tool_bar.add_tool(Wx::ID_PASTE, 'Paste', Wx::ArtProvider.get_bitmap(Wx::ART_PASTE, Wx::ART_MENU), 'Paste from clipboard')
|
|
164
|
+
@tool_bar.add_separator
|
|
165
|
+
@tool_bar.add_tool(Wx::ID_UNDO, 'Undo', Wx::ArtProvider.get_bitmap(Wx::ART_UNDO, Wx::ART_MENU), 'Undo')
|
|
166
|
+
@tool_bar.add_tool(Wx::ID_REDO, 'Redo', Wx::ArtProvider.get_bitmap(Wx::ART_REDO, Wx::ART_MENU), 'Redo')
|
|
167
|
+
@tool_bar.add_separator
|
|
168
|
+
@tool_bar.add_check_tool(ID::T_GRID, 'Grid', Wx::Bitmap(:Grid), Wx::NULL_BITMAP, 'Show/hide grid')
|
|
169
|
+
@tool_bar.add_check_tool(ID::T_SHADOW, 'Shadows', Wx::Bitmap(:Shadow), Wx::NULL_BITMAP, 'Show/hide shadows')
|
|
170
|
+
@tool_bar.add_check_tool(ID::T_GC, 'Enhanced graphics context', Wx::Bitmap(:GC), Wx::NULL_BITMAP, 'Use enhanced graphics context (Wx::GraphicsContext)')
|
|
171
|
+
@tool_bar.add_separator
|
|
172
|
+
@tool_bar.add_radio_tool(ID::T_TOOL, 'Tool', Wx::Bitmap(:Tool), Wx::NULL_BITMAP, 'Design tool')
|
|
173
|
+
@tool_bar.add_radio_tool(ID::T_RECTSHP, 'Rectangle', Wx::Bitmap(:Rect), Wx::NULL_BITMAP, 'Rectangle')
|
|
174
|
+
@tool_bar.add_radio_tool(ID::T_SQUARESHP, 'Fixed rectangle', Wx::Bitmap(:FixedRect), Wx::NULL_BITMAP, 'Fixed rectangle')
|
|
175
|
+
@tool_bar.add_radio_tool(ID::T_RNDRECTSHP, 'RoundRect', Wx::Bitmap(:RoundRect), Wx::NULL_BITMAP, 'Rounded rectangle')
|
|
176
|
+
@tool_bar.add_radio_tool(ID::T_ELLIPSESHP, 'Ellipse', Wx::Bitmap(:Ellipse), Wx::NULL_BITMAP, 'Ellipse')
|
|
177
|
+
@tool_bar.add_radio_tool(ID::T_CIRCLESHP, 'Circle', Wx::Bitmap(:Circle), Wx::NULL_BITMAP, 'Circle')
|
|
178
|
+
@tool_bar.add_radio_tool(ID::T_DIAMONDSHP, 'Diamond', Wx::Bitmap(:Diamond), Wx::NULL_BITMAP, 'Diamond')
|
|
179
|
+
@tool_bar.add_radio_tool(ID::T_TEXTSHP, 'Text', Wx::Bitmap(:Text), Wx::NULL_BITMAP, 'Text')
|
|
180
|
+
@tool_bar.add_radio_tool(ID::T_EDITTEXTSHP, 'Editable text', Wx::Bitmap(:EditText), Wx::NULL_BITMAP, 'Editable text')
|
|
181
|
+
@tool_bar.add_radio_tool(ID::T_BITMAPSHP, 'Bitmap', Wx::Bitmap(:Bitmap), Wx::NULL_BITMAP, 'Bitmap')
|
|
182
|
+
@tool_bar.add_radio_tool(ID::T_GRIDSHP, 'Grid shape', Wx::Bitmap(:Grid), Wx::NULL_BITMAP, 'Grid shape')
|
|
183
|
+
@tool_bar.add_radio_tool(ID::T_FLEXGRIDSHP, 'Flexible grid shape', Wx::Bitmap(:FlexGrid), Wx::NULL_BITMAP, 'Flexible grid shape')
|
|
184
|
+
@tool_bar.add_radio_tool(ID::T_LINESHP, 'Line', Wx::Bitmap(:Line), Wx::NULL_BITMAP, 'Polyline connection')
|
|
185
|
+
@tool_bar.add_radio_tool(ID::T_CURVESHP, 'Curve', Wx::Bitmap(:Curve), Wx::NULL_BITMAP, 'Curve connection')
|
|
186
|
+
@tool_bar.add_radio_tool(ID::T_ORTHOSHP, 'Ortho line', Wx::Bitmap(:OrthoLine), Wx::NULL_BITMAP, 'Orthogonal connection')
|
|
187
|
+
@tool_bar.add_radio_tool(ID::T_RNDORTHOSHP, 'Rounded ortho line', Wx::Bitmap(:RoundOrthoLine), Wx::NULL_BITMAP, 'Rounded orthogonal connection')
|
|
188
|
+
@tool_bar.add_radio_tool(ID::T_STANDALONELINESHP, 'Stand alone line', Wx::Bitmap(:StandAloneLine), Wx::NULL_BITMAP, 'Stand alone line')
|
|
189
|
+
@tool_bar.add_separator
|
|
190
|
+
@tool_bar.add_tool(ID::T_ALIGN_LEFT, 'Align left', Wx::Bitmap(:AlignLeft), 'Align selected shapes to the left')
|
|
191
|
+
@tool_bar.add_tool(ID::T_ALIGN_RIGHT, 'Align right', Wx::Bitmap(:AlignRight), 'Align selected shapes to the right')
|
|
192
|
+
@tool_bar.add_tool(ID::T_ALIGN_TOP, 'Align top', Wx::Bitmap(:AlignTop), 'Align selected shapes to the top')
|
|
193
|
+
@tool_bar.add_tool(ID::T_ALIGN_BOTTOM, 'Align bottom', Wx::Bitmap(:AlignBottom), 'Align selected shapes to the bottom')
|
|
194
|
+
@tool_bar.add_tool(ID::T_ALIGN_MIDDLE, 'Align middle', Wx::Bitmap(:AlignMiddle), 'Align selected shapes to the middle')
|
|
195
|
+
@tool_bar.add_tool(ID::T_ALIGN_CENTER, 'Align center', Wx::Bitmap(:AlignCenter), 'Align selected shapes to the center')
|
|
196
|
+
@tool_bar.add_separator
|
|
197
|
+
@tool_bar.add_control(@cpicker)
|
|
198
|
+
@tool_bar.realize
|
|
199
|
+
|
|
200
|
+
@status_bar.set_status_text('Ready')
|
|
201
|
+
|
|
202
|
+
# initialize data members
|
|
203
|
+
@tool_mode = MODE::DESIGN
|
|
204
|
+
@show_grid = true
|
|
205
|
+
@show_shadows = false
|
|
206
|
+
|
|
207
|
+
centre
|
|
208
|
+
|
|
209
|
+
# setup event handlers
|
|
210
|
+
evt_close(:on_close)
|
|
211
|
+
evt_menu(Wx::ID_EXIT, :on_exit)
|
|
212
|
+
evt_menu(Wx::ID_NEW, :on_new)
|
|
213
|
+
evt_menu(Wx::ID_OPEN, :on_load)
|
|
214
|
+
evt_menu(Wx::ID_SAVE, :on_save)
|
|
215
|
+
evt_menu(Wx::ID_UNDO, :on_undo)
|
|
216
|
+
evt_menu(Wx::ID_REDO, :on_redo)
|
|
217
|
+
evt_menu(Wx::ID_COPY, :on_copy)
|
|
218
|
+
evt_menu(Wx::ID_CUT, :on_cut)
|
|
219
|
+
evt_menu(Wx::ID_PASTE, :on_paste)
|
|
220
|
+
evt_menu(Wx::ID_ABOUT, :on_about)
|
|
221
|
+
evt_menu(Wx::ID_SELECTALL, :on_select_all)
|
|
222
|
+
evt_menu(ID::M_SAVEASBITMAP, :on_export_to_bmp)
|
|
223
|
+
evt_menu(Wx::ID_PRINT, :on_print)
|
|
224
|
+
evt_menu(Wx::ID_PREVIEW, :on_print_preview)
|
|
225
|
+
evt_menu(Wx::ID_PAGE_SETUP, :on_page_setup)
|
|
226
|
+
evt_menu_range(ID::M_AUTOLAYOUT_FIRST, ID::M_AUTOLAYOUT_LAST, :on_auto_layout)
|
|
227
|
+
evt_command_scroll(Wx::ID_ZOOM_FIT, :on_slider)
|
|
228
|
+
evt_tool_range(ID::T_FIRST_TOOLMARKER, ID::T_LAST_TOOLMARKER, :on_tool)
|
|
229
|
+
evt_colourpicker_changed(ID::T_COLORPICKER, :on_hover_color)
|
|
230
|
+
evt_update_ui(Wx::ID_COPY, :on_update_copy)
|
|
231
|
+
evt_update_ui(Wx::ID_CUT, :on_update_cut)
|
|
232
|
+
evt_update_ui(Wx::ID_PASTE, :on_update_paste)
|
|
233
|
+
evt_update_ui(Wx::ID_UNDO, :on_update_undo)
|
|
234
|
+
evt_update_ui(Wx::ID_REDO, :on_update_redo)
|
|
235
|
+
evt_update_ui_range(ID::T_FIRST_TOOLMARKER, ID::T_LAST_TOOLMARKER, :on_update_tool)
|
|
236
|
+
evt_update_ui_range(ID::M_AUTOLAYOUT_FIRST, ID::M_AUTOLAYOUT_LAST, :on_update_auto_layout)
|
|
237
|
+
evt_idle(:on_idle)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
attr_accessor :tool_mode, :show_grid, :show_shadows
|
|
241
|
+
|
|
242
|
+
attr_reader :zoom_slider
|
|
243
|
+
|
|
244
|
+
def setup_frame
|
|
245
|
+
if Wx::PLATFORM == 'WXMSW'
|
|
246
|
+
set_size_hints([1024,700])
|
|
247
|
+
else
|
|
248
|
+
set_size_hints([1100,700])
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
@menu_bar = Wx::MenuBar.new(0)
|
|
252
|
+
@file_menu = Wx::Menu.new
|
|
253
|
+
@menu_bar.append(@file_menu, "&File")
|
|
254
|
+
|
|
255
|
+
@edit_menu = Wx::Menu.new
|
|
256
|
+
@menu_bar.append(@edit_menu, "&Edit")
|
|
257
|
+
|
|
258
|
+
@auto_layout_menu = Wx::Menu.new
|
|
259
|
+
@menu_bar.append(@auto_layout_menu, "&AutoLayout")
|
|
260
|
+
|
|
261
|
+
@help_menu = Wx::Menu.new
|
|
262
|
+
@menu_bar.append(@help_menu, "&Help")
|
|
263
|
+
|
|
264
|
+
set_menu_bar(@menu_bar)
|
|
265
|
+
|
|
266
|
+
@tool_bar = create_tool_bar(Wx::TB_HORIZONTAL, Wx::ID_ANY)
|
|
267
|
+
@tool_bar.realize
|
|
268
|
+
|
|
269
|
+
@status_bar = create_status_bar(1, Wx::STB_SIZEGRIP, Wx::ID_ANY)
|
|
270
|
+
main_sizer = Wx::FlexGridSizer.new(2, 1, 0, 0)
|
|
271
|
+
main_sizer.add_growable_col(0)
|
|
272
|
+
main_sizer.add_growable_row(0)
|
|
273
|
+
main_sizer.set_flexible_direction(Wx::BOTH)
|
|
274
|
+
main_sizer.set_non_flexible_grow_mode(Wx::FLEX_GROWMODE_SPECIFIED)
|
|
275
|
+
|
|
276
|
+
@canvas_panel = Wx::Panel.new(self, Wx::ID_ANY, style: Wx::TAB_TRAVERSAL)
|
|
277
|
+
@canvas_panel.set_extra_style(Wx::WS_EX_BLOCK_EVENTS)
|
|
278
|
+
|
|
279
|
+
@canvas_sizer = Wx::VBoxSizer.new
|
|
280
|
+
|
|
281
|
+
@canvas_panel.set_sizer(@canvas_sizer)
|
|
282
|
+
@canvas_panel.layout
|
|
283
|
+
@canvas_sizer.fit(@canvas_panel)
|
|
284
|
+
main_sizer.add(@canvas_panel, 1, Wx::EXPAND, 5)
|
|
285
|
+
|
|
286
|
+
@zoom_slider = Wx::Slider.new(self, Wx::ID_ZOOM_FIT, 50, 2, 99, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::SL_HORIZONTAL)
|
|
287
|
+
@zoom_slider.set_background_colour(Wx::SystemSettings.get_colour(Wx::SYS_COLOUR_BTNFACE))
|
|
288
|
+
@zoom_slider.set_tool_tip("Set canvas scale")
|
|
289
|
+
|
|
290
|
+
main_sizer.add(@zoom_slider, 0, Wx::EXPAND, 5)
|
|
291
|
+
|
|
292
|
+
set_sizer(main_sizer)
|
|
293
|
+
layout
|
|
294
|
+
|
|
295
|
+
centre(Wx::BOTH)
|
|
296
|
+
end
|
|
297
|
+
private :setup_frame
|
|
298
|
+
|
|
299
|
+
protected
|
|
300
|
+
|
|
301
|
+
def clean_up
|
|
302
|
+
@diagram.set_shape_canvas(nil)
|
|
303
|
+
@diagram.clear
|
|
304
|
+
|
|
305
|
+
@thumb_frm.hide
|
|
306
|
+
@thumb_frm.thumbnail.set_canvas(nil)
|
|
307
|
+
|
|
308
|
+
destroy
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# common events
|
|
312
|
+
def on_close(_event)
|
|
313
|
+
clean_up
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def on_idle(_event)
|
|
317
|
+
if @diagram.is_modified
|
|
318
|
+
set_title('wxRuby ShapeFramework Demo (diagram is modified)')
|
|
319
|
+
else
|
|
320
|
+
set_title('wxRuby ShapeFramework Demo')
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# menu event handlers
|
|
325
|
+
def on_exit(_event)
|
|
326
|
+
clean_up
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
def on_new(_event)
|
|
330
|
+
if Wx.message_box('Current chart will be lost. Do you want to proceed?',
|
|
331
|
+
'wxRuby ShapeFramework', Wx::YES_NO | Wx::ICON_QUESTION) == Wx::YES
|
|
332
|
+
@diagram.clear
|
|
333
|
+
|
|
334
|
+
@shape_canvas.clear_canvas_history
|
|
335
|
+
@shape_canvas.save_canvas_state
|
|
336
|
+
|
|
337
|
+
@shape_canvas.refresh
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
def on_save(_event)
|
|
342
|
+
Wx::FileDialog(self, 'Save canvas to file...', Dir.getwd, '', 'JSON Files (*.json)|*.json', Wx::FD_SAVE | Wx::FD_OVERWRITE_PROMPT) do |dlg|
|
|
343
|
+
if dlg.show_modal == Wx::ID_OK
|
|
344
|
+
@shape_canvas.save_canvas(dlg.get_path)
|
|
345
|
+
|
|
346
|
+
Wx.message_box("The chart has been saved to '#{dlg.get_path}'.", 'wxRuby ShapeFramework')
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def on_load(_event)
|
|
352
|
+
Wx::FileDialog(self, 'Load canvas from file...', Dir.getwd, '', 'JSON Files (*.json)|*.json', Wx::FD_OPEN | Wx::FD_FILE_MUST_EXIST) do |dlg|
|
|
353
|
+
if dlg.show_modal == Wx::ID_OK
|
|
354
|
+
@shape_canvas.load_canvas(dlg.get_path)
|
|
355
|
+
@diagram = @shape_canvas.get_diagram
|
|
356
|
+
|
|
357
|
+
@zoom_slider.set_value((@shape_canvas.get_scale*50).to_i)
|
|
358
|
+
|
|
359
|
+
@cpicker.set_colour(@shape_canvas.get_hover_colour)
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def on_undo(_event)
|
|
365
|
+
@shape_canvas.undo
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def on_redo(_event)
|
|
369
|
+
@shape_canvas.redo
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
def on_copy(_event)
|
|
373
|
+
@shape_canvas.copy
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def on_cut(_event)
|
|
377
|
+
@shape_canvas.cut
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def on_paste(_event)
|
|
381
|
+
@shape_canvas.paste
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def on_about(_event)
|
|
385
|
+
Wx.message_box("wxRuby SF Demonstration Application\n" +
|
|
386
|
+
"wxRuby ShapeFramework version number: #{Wx::SF::VERSION}\n" +
|
|
387
|
+
"Martin Corino (c) 2023\n" +
|
|
388
|
+
"(original Michal Bliznak (c) 2007 - 2013)",
|
|
389
|
+
'wxRuby ShapeFramework')
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def on_select_all(_event)
|
|
393
|
+
@shape_canvas.select_all
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
def on_export_to_bmp(_event)
|
|
397
|
+
Wx::FileDialog(self, 'Export canvas to image...', Dir.getwd, '',
|
|
398
|
+
'BMP Files (*.bmp)|*.bmp|GIF Files (*.gif)|(*.gif)|XPM Files (*.xpm)|*.xpm|PNG Files (*.png)|*.png|JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg', Wx::FD_SAVE) do |dlg|
|
|
399
|
+
if dlg.show_modal == Wx::ID_OK
|
|
400
|
+
type = Wx::BitmapType::BITMAP_TYPE_ANY
|
|
401
|
+
|
|
402
|
+
case dlg.get_filter_index
|
|
403
|
+
when 0
|
|
404
|
+
type = Wx::BitmapType::BITMAP_TYPE_BMP
|
|
405
|
+
when 1
|
|
406
|
+
type = Wx::BitmapType::BITMAP_TYPE_GIF
|
|
407
|
+
when 2
|
|
408
|
+
type = Wx::BitmapType::BITMAP_TYPE_XPM
|
|
409
|
+
when 3
|
|
410
|
+
type = Wx::BitmapType::BITMAP_TYPE_PNG
|
|
411
|
+
when 4
|
|
412
|
+
type = Wx::BitmapType::BITMAP_TYPE_JPEG
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
if @shape_canvas.save_canvas_to_image(dlg.get_path, type: type, background: Wx::SF::WITH_BACKGROUND)
|
|
416
|
+
Wx.message_box("The image has been saved to '#{dlg.get_path}'.", 'wxRuby SF Demonstration Application')
|
|
417
|
+
else
|
|
418
|
+
Wx.message_box("Unable to save image to '#{dlg.get_path}'.", 'wxRuby SF Demonstration Application', Wx::OK | Wx::ICON_ERROR)
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
def on_print(_event)
|
|
425
|
+
@shape_canvas.print
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
def on_print_preview(_event)
|
|
429
|
+
@shape_canvas.print_preview
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
def on_page_setup(_event)
|
|
433
|
+
@shape_canvas.page_setup
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def on_auto_layout(event)
|
|
437
|
+
Wx::SF::AutoLayout.layout(@shape_canvas, @auto_layout_menu.get_label(event.get_id))
|
|
438
|
+
@shape_canvas.save_canvas_state
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
# toolbar event handlers
|
|
442
|
+
def on_slider(_event)
|
|
443
|
+
@shape_canvas.set_scale(@zoom_slider.get_value.to_f/50)
|
|
444
|
+
@shape_canvas.refresh(false)
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
def on_tool(event)
|
|
448
|
+
@shape_canvas.abort_interactive_connection if @shape_canvas.get_mode == Wx::SF::ShapeCanvas::MODE::CREATECONNECTION
|
|
449
|
+
|
|
450
|
+
case event.get_id
|
|
451
|
+
when ID::T_GRID
|
|
452
|
+
@show_grid = !@show_grid
|
|
453
|
+
if @show_grid
|
|
454
|
+
@shape_canvas.add_style(Wx::SF::ShapeCanvas::STYLE::GRID_SHOW)
|
|
455
|
+
@shape_canvas.add_style(Wx::SF::ShapeCanvas::STYLE::GRID_USE)
|
|
456
|
+
else
|
|
457
|
+
@shape_canvas.remove_style(Wx::SF::ShapeCanvas::STYLE::GRID_SHOW)
|
|
458
|
+
@shape_canvas.remove_style(Wx::SF::ShapeCanvas::STYLE::GRID_USE)
|
|
459
|
+
end
|
|
460
|
+
@shape_canvas.refresh(false)
|
|
461
|
+
|
|
462
|
+
when ID::T_SHADOW
|
|
463
|
+
@show_shadows = !@show_shadows
|
|
464
|
+
|
|
465
|
+
@shape_canvas.show_shadows(@show_shadows, Wx::SF::ShapeCanvas::SHADOWMODE::ALL)
|
|
466
|
+
# also shadows for topmost shapes only are allowed:
|
|
467
|
+
# @shape_canvas.show_shadows(@show_shadows, Wx::SF::ShapeCanvas::SHADOWMODE::TOPMOST)
|
|
468
|
+
@shape_canvas.refresh(false)
|
|
469
|
+
|
|
470
|
+
when ID::T_GC
|
|
471
|
+
if Wx.has_feature?(:USE_GRAPHICS_CONTEXT)
|
|
472
|
+
Wx::SF::ShapeCanvas.enable_gc(!Wx::SF::ShapeCanvas.gc_enabled?)
|
|
473
|
+
# update all shapes in the manager
|
|
474
|
+
@diagram.update_all
|
|
475
|
+
# refresh shape canvas
|
|
476
|
+
@shape_canvas.refresh(false)
|
|
477
|
+
else
|
|
478
|
+
Wx.message_box('Could not enable enhanced graphics context due to wxUSE_GRAPHICS_CONTEXT=0', 'wxRuby ShapeFramework', Wx::OK | Wx::ICON_WARNING)
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
when ID::T_BITMAPSHP
|
|
482
|
+
@tool_mode = MODE::BITMAP
|
|
483
|
+
|
|
484
|
+
when ID::T_CIRCLESHP
|
|
485
|
+
@tool_mode = MODE::CIRCLE
|
|
486
|
+
|
|
487
|
+
when ID::T_CURVESHP
|
|
488
|
+
@tool_mode = MODE::CURVE
|
|
489
|
+
|
|
490
|
+
when ID::T_ORTHOSHP
|
|
491
|
+
@tool_mode = MODE::ORTHOLINE
|
|
492
|
+
|
|
493
|
+
when ID::T_RNDORTHOSHP
|
|
494
|
+
@tool_mode = MODE::ROUNDORTHOLINE
|
|
495
|
+
|
|
496
|
+
when ID::T_DIAMONDSHP
|
|
497
|
+
@tool_mode = MODE::DIAMOND
|
|
498
|
+
|
|
499
|
+
when ID::T_EDITTEXTSHP
|
|
500
|
+
@tool_mode = MODE::EDITTEXT
|
|
501
|
+
|
|
502
|
+
when ID::T_ELLIPSESHP
|
|
503
|
+
@tool_mode = MODE::ELLIPSE
|
|
504
|
+
|
|
505
|
+
when ID::T_GRIDSHP
|
|
506
|
+
@tool_mode = MODE::GRID
|
|
507
|
+
|
|
508
|
+
when ID::T_FLEXGRIDSHP
|
|
509
|
+
@tool_mode = MODE::FLEXGRID
|
|
510
|
+
|
|
511
|
+
when ID::T_LINESHP
|
|
512
|
+
@tool_mode = MODE::LINE
|
|
513
|
+
|
|
514
|
+
when ID::T_STANDALONELINESHP
|
|
515
|
+
@tool_mode = MODE::STANDALONELINE
|
|
516
|
+
|
|
517
|
+
when ID::T_RECTSHP
|
|
518
|
+
@tool_mode = MODE::RECT
|
|
519
|
+
|
|
520
|
+
when ID::T_RNDRECTSHP
|
|
521
|
+
@tool_mode = MODE::ROUNDRECT
|
|
522
|
+
|
|
523
|
+
when ID::T_SQUARESHP
|
|
524
|
+
@tool_mode = MODE::FIXEDRECT
|
|
525
|
+
|
|
526
|
+
when ID::T_TEXTSHP
|
|
527
|
+
@tool_mode = MODE::TEXT
|
|
528
|
+
|
|
529
|
+
when ID::T_TOOL
|
|
530
|
+
@tool_mode = MODE::DESIGN
|
|
531
|
+
|
|
532
|
+
when ID::T_ALIGN_LEFT
|
|
533
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::LEFT, Wx::SF::ShapeCanvas::VALIGN::NONE)
|
|
534
|
+
|
|
535
|
+
when ID::T_ALIGN_RIGHT
|
|
536
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::RIGHT, Wx::SF::ShapeCanvas::VALIGN::NONE)
|
|
537
|
+
|
|
538
|
+
when ID::T_ALIGN_CENTER
|
|
539
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::CENTER, Wx::SF::ShapeCanvas::VALIGN::NONE)
|
|
540
|
+
|
|
541
|
+
when ID::T_ALIGN_TOP
|
|
542
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::NONE, Wx::SF::ShapeCanvas::VALIGN::TOP)
|
|
543
|
+
|
|
544
|
+
when ID::T_ALIGN_BOTTOM
|
|
545
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::NONE, Wx::SF::ShapeCanvas::VALIGN::BOTTOM)
|
|
546
|
+
|
|
547
|
+
when ID::T_ALIGN_MIDDLE
|
|
548
|
+
@shape_canvas.align_selected(Wx::SF::ShapeCanvas::HALIGN::NONE, Wx::SF::ShapeCanvas::VALIGN::MIDDLE)
|
|
549
|
+
|
|
550
|
+
else
|
|
551
|
+
event.skip
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
def on_hover_color(event)
|
|
556
|
+
@shape_canvas.set_hover_colour(event.get_colour)
|
|
557
|
+
end
|
|
558
|
+
|
|
559
|
+
def on_update_copy(event)
|
|
560
|
+
event.enable(@shape_canvas.can_copy?) if @shape_canvas
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
def on_update_cut(event)
|
|
564
|
+
event.enable(@shape_canvas.can_cut?) if @shape_canvas
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
def on_update_paste(event)
|
|
568
|
+
event.enable(@shape_canvas.can_paste?) if @shape_canvas
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
def on_update_undo(event)
|
|
572
|
+
event.enable(@shape_canvas.can_undo?) if @shape_canvas
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
def on_update_redo(event)
|
|
576
|
+
event.enable(@shape_canvas.can_redo?) if @shape_canvas
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
def on_update_tool(event)
|
|
580
|
+
case event.get_id
|
|
581
|
+
when ID::T_GRID
|
|
582
|
+
event.check(@show_grid)
|
|
583
|
+
|
|
584
|
+
when ID::T_GC
|
|
585
|
+
event.check(Wx::SF::ShapeCanvas.gc_enabled?)
|
|
586
|
+
|
|
587
|
+
when ID::T_BITMAPSHP
|
|
588
|
+
event.check(@tool_mode == MODE::BITMAP)
|
|
589
|
+
|
|
590
|
+
when ID::T_CIRCLESHP
|
|
591
|
+
event.check(@tool_mode == MODE::CIRCLE)
|
|
592
|
+
|
|
593
|
+
when ID::T_CURVESHP
|
|
594
|
+
event.check(@tool_mode == MODE::CURVE)
|
|
595
|
+
|
|
596
|
+
when ID::T_ORTHOSHP
|
|
597
|
+
event.check(@tool_mode == MODE::ORTHOLINE)
|
|
598
|
+
|
|
599
|
+
when ID::T_RNDORTHOSHP
|
|
600
|
+
event.check(@tool_mode == MODE::ROUNDORTHOLINE)
|
|
601
|
+
|
|
602
|
+
when ID::T_DIAMONDSHP
|
|
603
|
+
event.check(@tool_mode == MODE::DIAMOND)
|
|
604
|
+
|
|
605
|
+
when ID::T_EDITTEXTSHP
|
|
606
|
+
event.check(@tool_mode == MODE::EDITTEXT)
|
|
607
|
+
|
|
608
|
+
when ID::T_ELLIPSESHP
|
|
609
|
+
event.check(@tool_mode == MODE::ELLIPSE)
|
|
610
|
+
|
|
611
|
+
when ID::T_GRIDSHP
|
|
612
|
+
event.check(@tool_mode == MODE::GRID)
|
|
613
|
+
|
|
614
|
+
when ID::T_FLEXGRIDSHP
|
|
615
|
+
event.check(@tool_mode == MODE::FLEXGRID)
|
|
616
|
+
|
|
617
|
+
when ID::T_LINESHP
|
|
618
|
+
event.check(@tool_mode == MODE::LINE)
|
|
619
|
+
|
|
620
|
+
when ID::T_STANDALONELINESHP
|
|
621
|
+
event.check(@tool_mode == MODE::STANDALONELINE)
|
|
622
|
+
|
|
623
|
+
when ID::T_RECTSHP
|
|
624
|
+
event.check(@tool_mode == MODE::RECT)
|
|
625
|
+
|
|
626
|
+
when ID::T_RNDRECTSHP
|
|
627
|
+
event.check(@tool_mode == MODE::ROUNDRECT)
|
|
628
|
+
|
|
629
|
+
when ID::T_SQUARESHP
|
|
630
|
+
event.check(@tool_mode == MODE::FIXEDRECT)
|
|
631
|
+
|
|
632
|
+
when ID::T_TEXTSHP
|
|
633
|
+
event.check(@tool_mode == MODE::TEXT)
|
|
634
|
+
|
|
635
|
+
when ID::T_TOOL
|
|
636
|
+
event.check(@tool_mode == MODE::DESIGN)
|
|
637
|
+
|
|
638
|
+
when ID::T_ALIGN_RIGHT,
|
|
639
|
+
ID::T_ALIGN_LEFT,
|
|
640
|
+
ID::T_ALIGN_TOP,
|
|
641
|
+
ID::T_ALIGN_BOTTOM,
|
|
642
|
+
ID::T_ALIGN_MIDDLE,
|
|
643
|
+
ID::T_ALIGN_CENTER
|
|
644
|
+
event.enable(@shape_canvas.can_align_selected) if @shape_canvas
|
|
645
|
+
|
|
646
|
+
else
|
|
647
|
+
event.skip
|
|
648
|
+
end
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
def on_update_auto_layout(event)
|
|
652
|
+
event.enable(!@diagram.empty?)
|
|
653
|
+
end
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
Wx::App.run do
|
|
657
|
+
MainFrame.new(nil).show
|
|
658
|
+
end
|