wxruby 1.9.3-universal-darwin

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. data/LICENSE +53 -0
  2. data/README +299 -0
  3. data/lib/wx.rb +42 -0
  4. data/lib/wx/accessors.rb +52 -0
  5. data/lib/wx/classes/app.rb +45 -0
  6. data/lib/wx/classes/artprovider.rb +31 -0
  7. data/lib/wx/classes/bitmap.rb +23 -0
  8. data/lib/wx/classes/checklistbox.rb +45 -0
  9. data/lib/wx/classes/choice.rb +4 -0
  10. data/lib/wx/classes/clientdc.rb +13 -0
  11. data/lib/wx/classes/clipboard.rb +16 -0
  12. data/lib/wx/classes/colour.rb +47 -0
  13. data/lib/wx/classes/combobox.rb +4 -0
  14. data/lib/wx/classes/commandevent.rb +7 -0
  15. data/lib/wx/classes/controlwithitems.rb +10 -0
  16. data/lib/wx/classes/event.rb +5 -0
  17. data/lib/wx/classes/evthandler.rb +894 -0
  18. data/lib/wx/classes/font.rb +118 -0
  19. data/lib/wx/classes/grid.rb +129 -0
  20. data/lib/wx/classes/helpcontroller.rb +5 -0
  21. data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
  22. data/lib/wx/classes/htmlwindow.rb +6 -0
  23. data/lib/wx/classes/icon.rb +14 -0
  24. data/lib/wx/classes/image.rb +14 -0
  25. data/lib/wx/classes/listbox.rb +4 -0
  26. data/lib/wx/classes/listctrl.rb +21 -0
  27. data/lib/wx/classes/locale.rb +28 -0
  28. data/lib/wx/classes/mediactrl.rb +22 -0
  29. data/lib/wx/classes/menu.rb +62 -0
  30. data/lib/wx/classes/menuitem.rb +7 -0
  31. data/lib/wx/classes/object.rb +7 -0
  32. data/lib/wx/classes/paintdc.rb +12 -0
  33. data/lib/wx/classes/point.rb +48 -0
  34. data/lib/wx/classes/previewframe.rb +13 -0
  35. data/lib/wx/classes/rect.rb +5 -0
  36. data/lib/wx/classes/size.rb +49 -0
  37. data/lib/wx/classes/sound.rb +23 -0
  38. data/lib/wx/classes/styledtextctrl.rb +92 -0
  39. data/lib/wx/classes/textctrl.rb +14 -0
  40. data/lib/wx/classes/texturlevent.rb +6 -0
  41. data/lib/wx/classes/timer.rb +69 -0
  42. data/lib/wx/classes/treectrl.rb +44 -0
  43. data/lib/wx/classes/window.rb +49 -0
  44. data/lib/wx/classes/xmlresource.rb +16 -0
  45. data/lib/wx/keyword_ctors.rb +219 -0
  46. data/lib/wx/keyword_defs.rb +485 -0
  47. data/lib/wx/version.rb +3 -0
  48. data/lib/wxruby2.bundle +0 -0
  49. data/samples/SAMPLES-LICENSE.TXT +18 -0
  50. data/samples/aui/aui.rb +1360 -0
  51. data/samples/bigdemo/About.rbw +39 -0
  52. data/samples/bigdemo/ColorPanel.rbw +25 -0
  53. data/samples/bigdemo/GridSimple.rbw +80 -0
  54. data/samples/bigdemo/MDIDemo.rbw +59 -0
  55. data/samples/bigdemo/PopupMenu.rbw +151 -0
  56. data/samples/bigdemo/ShapedWindow.rbw +135 -0
  57. data/samples/bigdemo/Sizers.rbw +545 -0
  58. data/samples/bigdemo/bigdemo.rb +826 -0
  59. data/samples/bigdemo/demoTemplate.rbw +37 -0
  60. data/samples/bigdemo/helpfile.htb +0 -0
  61. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  62. data/samples/bigdemo/icons/Test 015.png +0 -0
  63. data/samples/bigdemo/icons/choice.bmp +0 -0
  64. data/samples/bigdemo/icons/choice.xpm +27 -0
  65. data/samples/bigdemo/icons/combo.bmp +0 -0
  66. data/samples/bigdemo/icons/combo.xpm +27 -0
  67. data/samples/bigdemo/icons/copy.xpm +25 -0
  68. data/samples/bigdemo/icons/cut.xpm +24 -0
  69. data/samples/bigdemo/icons/gauge.bmp +0 -0
  70. data/samples/bigdemo/icons/gauge.xpm +27 -0
  71. data/samples/bigdemo/icons/help.xpm +25 -0
  72. data/samples/bigdemo/icons/list.bmp +0 -0
  73. data/samples/bigdemo/icons/list.xpm +27 -0
  74. data/samples/bigdemo/icons/mondrian.ico +0 -0
  75. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  76. data/samples/bigdemo/icons/new.xpm +24 -0
  77. data/samples/bigdemo/icons/ogl.ico +0 -0
  78. data/samples/bigdemo/icons/ogl.xpm +45 -0
  79. data/samples/bigdemo/icons/open.xpm +26 -0
  80. data/samples/bigdemo/icons/paste.bmp +0 -0
  81. data/samples/bigdemo/icons/paste.xpm +38 -0
  82. data/samples/bigdemo/icons/pointy.png +0 -0
  83. data/samples/bigdemo/icons/preview.xpm +26 -0
  84. data/samples/bigdemo/icons/print.xpm +26 -0
  85. data/samples/bigdemo/icons/radio.bmp +0 -0
  86. data/samples/bigdemo/icons/radio.xpm +27 -0
  87. data/samples/bigdemo/icons/robert.xpm +415 -0
  88. data/samples/bigdemo/icons/ruby.png +0 -0
  89. data/samples/bigdemo/icons/sashtest.ico +0 -0
  90. data/samples/bigdemo/icons/save.xpm +25 -0
  91. data/samples/bigdemo/icons/smiles.bmp +0 -0
  92. data/samples/bigdemo/icons/smiles.xpm +39 -0
  93. data/samples/bigdemo/icons/smiley.ico +0 -0
  94. data/samples/bigdemo/icons/smiley.xpm +42 -0
  95. data/samples/bigdemo/icons/stattext.xpm +24 -0
  96. data/samples/bigdemo/icons/test2.bmp +0 -0
  97. data/samples/bigdemo/icons/test2.png +0 -0
  98. data/samples/bigdemo/icons/test2.xpm +79 -0
  99. data/samples/bigdemo/icons/text.bmp +0 -0
  100. data/samples/bigdemo/icons/text.xpm +27 -0
  101. data/samples/bigdemo/icons/tog1.bmp +0 -0
  102. data/samples/bigdemo/icons/tog1.xpm +38 -0
  103. data/samples/bigdemo/icons/tog2.bmp +0 -0
  104. data/samples/bigdemo/icons/tog2.xpm +38 -0
  105. data/samples/bigdemo/icons/wxwin.ico +0 -0
  106. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  107. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  108. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  109. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  110. data/samples/bigdemo/run.rb +94 -0
  111. data/samples/bigdemo/tips.txt +7 -0
  112. data/samples/bigdemo/utils.rb +12 -0
  113. data/samples/bigdemo/wxArtProvider.rbw +285 -0
  114. data/samples/bigdemo/wxBitmapButton.rbw +64 -0
  115. data/samples/bigdemo/wxButton.rbw +66 -0
  116. data/samples/bigdemo/wxCalendarCtrl.rbw +72 -0
  117. data/samples/bigdemo/wxCheckBox.rbw +52 -0
  118. data/samples/bigdemo/wxCheckListBox.rbw +77 -0
  119. data/samples/bigdemo/wxChoice.rbw +49 -0
  120. data/samples/bigdemo/wxChoicebook.rbw +80 -0
  121. data/samples/bigdemo/wxColourDialog.rbw +34 -0
  122. data/samples/bigdemo/wxComboBox.rbw +79 -0
  123. data/samples/bigdemo/wxCursor.rbw +140 -0
  124. data/samples/bigdemo/wxDialog.rbw +92 -0
  125. data/samples/bigdemo/wxDirDialog.rbw +32 -0
  126. data/samples/bigdemo/wxDragImage.rbw +74 -0
  127. data/samples/bigdemo/wxFileDialog.rbw +39 -0
  128. data/samples/bigdemo/wxFileDialog_Save.rbw +38 -0
  129. data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -0
  130. data/samples/bigdemo/wxFontDialog.rbw +176 -0
  131. data/samples/bigdemo/wxFrame.rbw +55 -0
  132. data/samples/bigdemo/wxGauge.rbw +73 -0
  133. data/samples/bigdemo/wxGenericDirCtrl.rbw +78 -0
  134. data/samples/bigdemo/wxGrid.rbw +68 -0
  135. data/samples/bigdemo/wxHtmlHelpController.rbw +57 -0
  136. data/samples/bigdemo/wxListBox.rbw +142 -0
  137. data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -0
  138. data/samples/bigdemo/wxMDIWindows.rbw +52 -0
  139. data/samples/bigdemo/wxMenu.rbw +238 -0
  140. data/samples/bigdemo/wxMessageDialog.rbw +30 -0
  141. data/samples/bigdemo/wxMiniFrame.rbw +74 -0
  142. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -0
  143. data/samples/bigdemo/wxNotebook.rbw +138 -0
  144. data/samples/bigdemo/wxProgressDialog.rbw +45 -0
  145. data/samples/bigdemo/wxRadioBox.rbw +74 -0
  146. data/samples/bigdemo/wxRadioButton.rbw +127 -0
  147. data/samples/bigdemo/wxSashWindow.rbw +145 -0
  148. data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
  149. data/samples/bigdemo/wxScrolledWindow.rbw +201 -0
  150. data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -0
  151. data/samples/bigdemo/wxSlider.rbw +44 -0
  152. data/samples/bigdemo/wxSpinButton.rbw +52 -0
  153. data/samples/bigdemo/wxSpinCtrl.rbw +53 -0
  154. data/samples/bigdemo/wxSplitterWindow.rbw +65 -0
  155. data/samples/bigdemo/wxStaticBitmap.rbw +53 -0
  156. data/samples/bigdemo/wxStaticText.rbw +57 -0
  157. data/samples/bigdemo/wxStatusBar.rbw +128 -0
  158. data/samples/bigdemo/wxTextCtrl.rbw +151 -0
  159. data/samples/bigdemo/wxTextEntryDialog.rbw +34 -0
  160. data/samples/bigdemo/wxToggleButton.rbw +51 -0
  161. data/samples/bigdemo/wxToolBar.rbw +133 -0
  162. data/samples/bigdemo/wxTreeCtrl.rbw +192 -0
  163. data/samples/calendar/calendar.rb +275 -0
  164. data/samples/caret/caret.rb +286 -0
  165. data/samples/caret/mondrian.xpm +44 -0
  166. data/samples/controls/controls.rb +1140 -0
  167. data/samples/controls/get_item_sample.rb +87 -0
  168. data/samples/controls/icons/choice.xpm +27 -0
  169. data/samples/controls/icons/combo.xpm +27 -0
  170. data/samples/controls/icons/gauge.xpm +27 -0
  171. data/samples/controls/icons/list.xpm +27 -0
  172. data/samples/controls/icons/radio.xpm +27 -0
  173. data/samples/controls/icons/stattext.xpm +24 -0
  174. data/samples/controls/icons/text.xpm +27 -0
  175. data/samples/controls/mondrian.ico +0 -0
  176. data/samples/controls/mondrian.xpm +44 -0
  177. data/samples/controls/test2.bmp +0 -0
  178. data/samples/dialogs/dialogs.rb +724 -0
  179. data/samples/dialogs/tips.txt +18 -0
  180. data/samples/drawing/graphics_drawing.rb +232 -0
  181. data/samples/drawing/images.rb +48 -0
  182. data/samples/drawing/paperclip.png +0 -0
  183. data/samples/etc/activation.rb +108 -0
  184. data/samples/etc/choice.rb +72 -0
  185. data/samples/etc/miniframe.rb +84 -0
  186. data/samples/etc/sash.rb +135 -0
  187. data/samples/etc/scrollwin.rb +116 -0
  188. data/samples/etc/system_settings.rb +258 -0
  189. data/samples/etc/threaded.rb +81 -0
  190. data/samples/etc/wizard.rb +79 -0
  191. data/samples/event/event.rb +184 -0
  192. data/samples/grid/grid.rb +202 -0
  193. data/samples/html/html.rb +264 -0
  194. data/samples/listbook/listbook.rb +181 -0
  195. data/samples/listbook/listbook.xrc +370 -0
  196. data/samples/mdi/mdi.rb +87 -0
  197. data/samples/media/mediactrl.rb +173 -0
  198. data/samples/minimal/minimal.rb +85 -0
  199. data/samples/minimal/mondrian.ico +0 -0
  200. data/samples/minimal/mondrian.png +0 -0
  201. data/samples/minimal/nothing.rb +21 -0
  202. data/samples/opengl/cube.rb +123 -0
  203. data/samples/printing/mondrian.ico +0 -0
  204. data/samples/printing/mondrian.xpm +44 -0
  205. data/samples/printing/printing.rb +484 -0
  206. data/samples/sockets/SocketPackets.rb +27 -0
  207. data/samples/sockets/res/message-new.png +0 -0
  208. data/samples/sockets/res/user.png +0 -0
  209. data/samples/sockets/wxClient.rb +395 -0
  210. data/samples/sockets/wxServer.rb +422 -0
  211. data/samples/sockets/wxSocketGUI.rb +97 -0
  212. data/samples/text/mondrian.ico +0 -0
  213. data/samples/text/mondrian.xpm +44 -0
  214. data/samples/text/scintilla.rb +174 -0
  215. data/samples/text/textctrl.rb +124 -0
  216. data/samples/text/unicode.rb +238 -0
  217. data/samples/text/utf8.txt +15 -0
  218. data/samples/treectrl/icon1.xpm +79 -0
  219. data/samples/treectrl/icon2.xpm +53 -0
  220. data/samples/treectrl/icon3.xpm +79 -0
  221. data/samples/treectrl/icon4.xpm +43 -0
  222. data/samples/treectrl/icon5.xpm +79 -0
  223. data/samples/treectrl/treectrl.rb +1180 -0
  224. data/samples/xrc/samples.xrc +46 -0
  225. data/samples/xrc/xrc_sample.rb +107 -0
  226. metadata +296 -0
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ # This simple sample demonstrates how to use Ruby 1.8's lightweight
17
+ # (green) threads to execute non-GUI code in parallel with a wxRuby
18
+ # GUI. This strategy is useful in a number of situations:
19
+ #
20
+ # * To keep the GUI responsive whilst computationally intensive
21
+ # operations are carried out in the background
22
+ # * To keep the GUI responsive while waiting for networking operations
23
+ # to complete
24
+ #
25
+ # The basic problem is that, as with other Ruby GUI toolkits, non-GUI
26
+ # threads will not, by default, get allocated time to run while Ruby is
27
+ # busy in Wx code - the main wxRuby event loop. Strategies to deal with
28
+ # this include using non-blocking IO, and, more generically, using
29
+ # wxRuby's Timer class to explicitly allocate time for non-GUI threads
30
+ # to run. The latter technique is shown here.
31
+
32
+ # This frame shows a set of progress bars which monitor progress of
33
+ # long-running tasks. In this example, this long-running task is
34
+ # emulated by simply sleep-ing for random periods, but could equally be
35
+ # downloading from a socket or parsing a file.
36
+ class ProgressFrame < Wx::Frame
37
+ STEPS = 20
38
+ def initialize
39
+ super(nil, :title => 'Threading demo')
40
+ @gauges = []
41
+ panel = Wx::Panel.new(self)
42
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
43
+ # show ten gauges
44
+ 10.times do
45
+ gauge = Wx::Gauge.new(panel, :range => STEPS)
46
+ # For each gauge, start a new thread in which the task runs
47
+ Thread.new do
48
+ # The long-running task
49
+ STEPS.times do | i |
50
+ sleep rand(100) / 50.0
51
+ # Update the main GUI
52
+ gauge.value = i + 1
53
+ end
54
+ end
55
+ @gauges << gauge
56
+ sizer.add(gauge, 0, Wx::GROW|Wx::ALL, 2)
57
+ end
58
+ panel.sizer = sizer
59
+ sizer.fit(panel)
60
+ end
61
+ end
62
+
63
+ # This app class creates a frame, and, importantly, a timer to allow
64
+ class GaugeApp < Wx::App
65
+ # Get a guaranteed-unique id
66
+ THREAD_TIMER_ID = Wx::ID_HIGHEST + 1
67
+ def on_init
68
+ # Create a global application timer
69
+ t = Wx::Timer.new(self, THREAD_TIMER_ID)
70
+ # When the timer "ticks", switch control to other ruby threads
71
+ evt_timer(THREAD_TIMER_ID) { Thread.pass }
72
+ # Start the timer to run every 1/40 second (25ms); higher values
73
+ # will make the other threads run more often, but will eventually
74
+ # degrade the responsiveness of the GUI.
75
+ t.start(25)
76
+ prog = ProgressFrame.new
77
+ prog.show
78
+ end
79
+ end
80
+
81
+ GaugeApp.new.main_loop
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ class MyFrame < Wx::Frame
17
+ def initialize(title, pos, size)
18
+ super(nil, :title => title, :position => pos, :size => size)
19
+
20
+ menuFile = Wx::Menu.new
21
+ helpMenu = Wx::Menu.new
22
+ helpMenu.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
23
+ menuFile.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
24
+ menuBar = Wx::MenuBar.new
25
+ menuBar.append(menuFile, "&File")
26
+ menuBar.append(helpMenu, "&Help")
27
+ self.menu_bar = menuBar
28
+
29
+ create_status_bar(1)
30
+ self.status_text = "Welcome to wxRuby!"
31
+ s = Wx::StaticText.new(self, :label => 'The Wizard has completed')
32
+ evt_menu Wx::ID_EXIT, :on_quit
33
+ evt_menu Wx::ID_ABOUT, :on_about
34
+
35
+ w = Wx::Wizard.new(self, :title => 'The WxRuby Wizard')
36
+ p1 = Wx::WizardPageSimple.new(w)
37
+ s = Wx::StaticText.new(p1, :label => 'This is the first page')
38
+
39
+ p2 = Wx::WizardPageSimple.new(w, p1)
40
+ p1.set_next(p2)
41
+ s = Wx::StaticText.new(p2, :label => 'This is the second page')
42
+
43
+ p3 = Wx::WizardPageSimple.new(w, p2)
44
+ p2.set_next(p3)
45
+ s = Wx::StaticText.new(p3, :label => 'This is the final page')
46
+
47
+ evt_wizard_page_changed(w) { p "page changed" }
48
+ evt_wizard_page_changing(w) { p "page changing" }
49
+ evt_wizard_help(w) { p "wizard help" }
50
+ evt_wizard_cancel(w) { p "wizard cancelled" }
51
+ evt_wizard_finished(w) { p "wizard finished" }
52
+
53
+ w.run_wizard(p1)
54
+ end
55
+
56
+ def on_quit
57
+ close(true)
58
+ end
59
+
60
+ def on_about
61
+ msg = sprintf("This is the About dialog of the wizard sample.\n" \
62
+ "Welcome to %s", Wx::VERSION_STRING)
63
+ Wx::message_box(msg, "About Wizard", Wx::OK|Wx::ICON_INFORMATION, self)
64
+ end
65
+ end
66
+
67
+ class RbApp < Wx::App
68
+ def on_init
69
+ frame = MyFrame.new("Wizard wxRuby App",
70
+ Wx::Point.new(50, 50),
71
+ Wx::Size.new(450, 340))
72
+ frame.show(true)
73
+
74
+ end
75
+ end
76
+
77
+ app = RbApp.new
78
+ app.main_loop()
79
+
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2007 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'rubygems'
7
+ require 'wx'
8
+ rescue LoadError
9
+ require 'wx'
10
+ end
11
+
12
+ # This sample demonstrates how to dynamically connect and disconnect
13
+ # event handlers, and how to create custom event types and listeners
14
+ # associated with user-defined control classes.
15
+
16
+ # A custom type of event associated with a target control. Note that for
17
+ # user-defined controls, the associated event should inherit from
18
+ # Wx::CommandEvent rather than Wx::Event.
19
+ class TargetHitEvent < Wx::CommandEvent
20
+ # Create a new unique constant identifier, associate this class
21
+ # with events of that identifier, and create a shortcut 'evt_target'
22
+ # method for setting up this handler.
23
+ EVT_HIT_TARGET = Wx::EvtHandler.register_class(self, nil, 'evt_target', 1)
24
+
25
+ def initialize(target, score, distance)
26
+ # The constant id is the arg to super
27
+ super(EVT_HIT_TARGET)
28
+ # client_data should be used to store any information associated
29
+ # with the event.
30
+ self.client_data = { :score => score, :distance => distance }
31
+ self.id = target.get_id
32
+ end
33
+
34
+ # Returns the points score associated with this event
35
+ def score
36
+ client_data[:score]
37
+ end
38
+
39
+ # Returns the distance (in pixels) from the centre of the target
40
+ def distance
41
+ client_data[:distance]
42
+ end
43
+ end
44
+
45
+ # An example of a simple user-written control, which displays a
46
+ # "bulls-eye" like target, and sends events with a score and distance
47
+ class TargetControl < Wx::Window
48
+ TargetCircle = Struct.new(:radius, :score, :brush)
49
+
50
+ def initialize(parent, *args)
51
+ super(parent, *args)
52
+
53
+ # Set up the scores and sizes of the rings
54
+ @radii = [
55
+ TargetCircle[ 0.1, 20, Wx::RED_BRUSH ],
56
+ TargetCircle[ 0.25, 10, Wx::BLUE_BRUSH ],
57
+ TargetCircle[ 0.4, 5, Wx::GREEN_BRUSH ] ]
58
+ evt_paint { | e | on_paint(e) }
59
+ evt_left_down { | e | on_left_down(e) }
60
+ end
61
+
62
+ # What point is at the centre (assuming this control is always square)
63
+ def centre_point
64
+ size.width / 2
65
+ end
66
+
67
+ # Called whenever the target is repainted, draws a series of
68
+ # concentric circles
69
+ def on_paint(evt)
70
+ paint do | dc |
71
+ dc.clear
72
+ @radii.reverse_each do | circ |
73
+ dc.brush = circ.brush
74
+ dc.draw_circle(centre_point, centre_point,
75
+ ( size.width * circ.radius).to_i )
76
+ end
77
+ end
78
+ end
79
+
80
+ # Test if the target was hit, and generate a TargetHitEvent if so
81
+ def on_left_down(evt)
82
+ # quick bit of pythagoras...
83
+ distance = Math.sqrt( ( evt.x - centre_point ) ** 2 +
84
+ ( evt.y - centre_point ) ** 2 )
85
+ # See which target ring, if any, was hit by the event
86
+ @radii.each do | circ |
87
+ if distance < ( size.width * circ.radius)
88
+ # Create an instance of the event
89
+ evt = TargetHitEvent.new(self, circ.score, distance)
90
+ # This sends the event for processing by listeners
91
+ event_handler.process_event(evt)
92
+ break
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ # Container frame for the target control
99
+ class TargetFrame < Wx::Frame
100
+ def initialize(title)
101
+ super(nil, :title => title, :size => [300, 300])
102
+ @tgt = TargetControl.new(self)
103
+ # This user-defined event handling method was set up by
104
+ # EvtHandler.register_class, above
105
+ evt_target(@tgt.get_id) { | e | on_target(e) }
106
+ @listening = true
107
+ evt_size { | e | on_size(e) }
108
+ setup_menus
109
+ create_status_bar
110
+ end
111
+
112
+ # What's done when the target is hit
113
+ def on_target(evt)
114
+ msg = "Target hit for score %i, %.2f pixels from centre" %
115
+ [ evt.score, evt.distance ]
116
+ self.status_text = msg
117
+ end
118
+
119
+ # Keep the target centred and square
120
+ def on_size(evt)
121
+ smaller = [ evt.size.width, evt.size.height ].min
122
+ @tgt.centre
123
+ @tgt.size = Wx::Size.new(smaller, smaller)
124
+ @tgt.refresh
125
+ end
126
+
127
+ # Toggle whether or not we are listening for events from the bulls-eye
128
+ # target
129
+ def on_toggle_connect
130
+ if @listening
131
+ # Remove :evt_target event handler for the @tgt
132
+ disconnect(@tgt.get_id, Wx::ID_ANY, :evt_target)
133
+ menu_bar.check(TOGGLE_LISTEN, false)
134
+ self.status_text = "Ignoring target events"
135
+ @listening = false
136
+ else
137
+ # Restore evt_target event handler for the @tgt
138
+ evt_target(@tgt.get_id) { | e | on_target(e) }
139
+ menu_bar.check(TOGGLE_LISTEN, true)
140
+ self.status_text = ''
141
+ @listening = true
142
+ end
143
+ end
144
+
145
+ def on_about
146
+ msg = sprintf("This is the About dialog of the event handling sample.\n" \
147
+ "Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
148
+
149
+ about_dlg = Wx::MessageDialog.new( self, msg, 'About Event Handling',
150
+ Wx::OK|Wx::ICON_INFORMATION )
151
+ about_dlg.show_modal
152
+
153
+ end
154
+
155
+ TOGGLE_LISTEN = 1001
156
+ def setup_menus
157
+ menu_file = Wx::Menu.new
158
+ menu_help = Wx::Menu.new
159
+ menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
160
+ evt_menu(Wx::ID_ABOUT) { on_about }
161
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
162
+ evt_menu(Wx::ID_EXIT) { self.close }
163
+ menu_file.append_check_item(TOGGLE_LISTEN, "L&isten for events",
164
+ "Toggle listening for target events")
165
+ evt_menu(TOGGLE_LISTEN) { on_toggle_connect }
166
+
167
+ menu_bar = Wx::MenuBar.new
168
+ menu_bar.append(menu_file, "&File")
169
+ menu_bar.append(menu_help, "&Help")
170
+
171
+ self.menu_bar = menu_bar
172
+ menu_bar.check(TOGGLE_LISTEN, true)
173
+ end
174
+ end
175
+
176
+ class TargetApp < Wx::App
177
+ def on_init
178
+ TargetFrame.new("Event Handling Sample").show
179
+ return true
180
+ end
181
+ end
182
+
183
+ a = TargetApp.new
184
+ a.main_loop()
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require 'wx'
4
+ rescue LoadError => no_wx_err
5
+ begin
6
+ require 'rubygems'
7
+ load 'wx'
8
+ rescue
9
+ raise no_wx_err
10
+ end
11
+ end
12
+
13
+
14
+ class GridFrame < Wx::Frame
15
+
16
+ def initialize(parent, id = -1, title = "MyFrame",
17
+ pos = Wx::DEFAULT_POSITION,
18
+ size = Wx::DEFAULT_SIZE,
19
+ style = Wx::DEFAULT_FRAME_STYLE)
20
+
21
+ super(parent, id, title, pos, size, style)
22
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
23
+ create_status_bar()
24
+ set_status_text(Wx::VERSION_STRING)
25
+
26
+ # panel = Wx::Panel.new(self)
27
+ sel_menu = Wx::Menu.new
28
+ sel_menu.append(1002, 'Select all', 'Select all')
29
+ evt_menu(1002) { @grid.select_all }
30
+ sel_menu.append(1003, 'Select row 2', 'Select row 2')
31
+ evt_menu(1003) { @grid.select_row(1) }
32
+ sel_menu.append(1004, 'Select column 4', 'Select col 4')
33
+ evt_menu(1004) { @grid.select_col(3) }
34
+ sel_menu.append(1005, 'Select block', 'Select block')
35
+ evt_menu(1005) { @grid.select_block(1, 1, 6, 3) }
36
+ menu_bar = Wx::MenuBar.new
37
+ menu_bar.append(sel_menu, 'Select')
38
+ set_menu_bar(menu_bar)
39
+
40
+ make_grid(self)
41
+ sizer.add(@grid, 1, Wx::ALL|Wx::GROW, 4)
42
+ set_sizer(sizer)
43
+
44
+ evt_grid_cell_left_click() do |evt|
45
+ set_status_text("#{evt.get_row} x #{evt.get_col} is clicked")
46
+ evt.skip
47
+ end
48
+
49
+ evt_grid_cell_right_click() do |evt|
50
+ set_status_text("#{evt.get_row} x #{evt.get_col} is right clicked")
51
+ evt.skip
52
+ end
53
+
54
+ evt_grid_cell_left_dclick() do |evt|
55
+ set_status_text("#{evt.get_row} x #{evt.get_col} is double clicked")
56
+ evt.skip
57
+ end
58
+
59
+ evt_grid_cell_right_dclick() do |evt|
60
+ set_status_text("#{evt.get_row} x #{evt.get_col} is right double clicked")
61
+ evt.skip
62
+ end
63
+
64
+ evt_grid_label_left_click() do |evt|
65
+ set_status_text("#{evt.get_row} x #{evt.get_col} label is clicked")
66
+ evt.skip
67
+ end
68
+
69
+ evt_grid_label_right_click() do |evt|
70
+ set_status_text("#{evt.get_row} x #{evt.get_col} label is right clicked")
71
+ evt.skip
72
+ end
73
+
74
+ evt_grid_label_left_dclick() do |evt|
75
+ set_status_text("#{evt.get_row} x #{evt.get_col} labelis double clicked")
76
+ evt.skip
77
+ end
78
+
79
+ evt_grid_label_right_dclick() do |evt|
80
+ set_status_text("#{evt.get_row} x #{evt.get_col} label is right double clicked")
81
+ evt.skip
82
+ end
83
+
84
+ evt_grid_select_cell() do |evt|
85
+ set_status_text("#{evt.get_row} x #{evt.get_col} cell is selected")
86
+ evt.skip
87
+ end
88
+
89
+ evt_grid_row_size do |evt|
90
+ set_status_text("Row #{evt.get_row_or_col} size changed")
91
+ evt.skip
92
+ end
93
+
94
+ evt_grid_col_size do |evt|
95
+ set_status_text("Column #{evt.get_row_or_col} size changed")
96
+ evt.skip
97
+ end
98
+
99
+ evt_grid_editor_shown do |evt|
100
+ set_status_text("Begin editing")
101
+ evt.skip
102
+ end
103
+
104
+ evt_grid_editor_hidden do |evt|
105
+ set_status_text("End editing")
106
+ evt.skip
107
+ end
108
+
109
+ evt_grid_range_select do |evt|
110
+ top = evt.get_top_left_coords
111
+ bottom = evt.get_bottom_right_coords
112
+ set_status_text("[ #{top[0].to_s} x #{top[1].to_s} ] to [ #{bottom[0].to_s} x #{bottom[1].to_s} ] is selected")
113
+ end
114
+
115
+ evt_grid_editor_created do |evt|
116
+ set_status_text("Control #{evt.get_control} created")
117
+ evt.skip
118
+ end
119
+
120
+ evt_grid_cell_change() do |evt|
121
+ set_status_text("Cell #{evt.get_row} x #{evt.get_col} has changed")
122
+ end
123
+ end
124
+
125
+ # Create a wxGrid object
126
+ def make_grid(panel)
127
+ @grid = Wx::Grid.new(panel, -1)
128
+
129
+ # Then we call CreateGrid to set the dimensions of the grid
130
+ # (11 rows and 12 columns in this example)
131
+ @grid.create_grid( 20, 12 )
132
+ @grid.set_default_cell_background_colour(Wx::WHITE)
133
+ # We can set the sizes of individual rows and columns
134
+ # in pixels, and the label value string
135
+ @grid.set_row_size( 0, 60 )
136
+ @grid.set_row_label_value( 0, "Row1" )
137
+ @grid.set_row_label_alignment(Wx::ALIGN_CENTRE, Wx::ALIGN_CENTRE)
138
+
139
+ @grid.set_col_size( 0, 120 )
140
+ @grid.set_col_label_value( 0, "Col1" )
141
+ @grid.set_col_label_alignment(Wx::ALIGN_CENTRE, Wx::ALIGN_CENTRE)
142
+
143
+ # And set grid cell contents as strings
144
+ @grid.set_cell_value( 0, 0, "wxGrid is good" )
145
+
146
+ # We can specify that some cells are read-only
147
+ @grid.set_cell_value( 0, 2, "Read-only" )
148
+ @grid.set_read_only( 0, 2 )
149
+
150
+ # Colours can be specified for grid cell contents
151
+ @grid.set_cell_value(1, 1, "white on red")
152
+ @grid.set_cell_text_colour(1, 1, Wx::WHITE)
153
+ @grid.set_cell_background_colour(1, 1, Wx::RED)
154
+
155
+ # We can specify the some cells will store numeric
156
+ # values rather than strings. Here we set grid column 6
157
+ # to hold floating point values displayed with width
158
+ # of 2 and precision of 2. The column is highlighted in light grey
159
+ cell_attr = Wx::GridCellAttr.new
160
+ cell_attr.set_background_colour( Wx::LIGHT_GREY )
161
+ cell_attr.set_renderer( Wx::GridCellFloatRenderer.new(2, 2) )
162
+
163
+ @grid.set_col_attr(5, cell_attr)
164
+ @grid.set_cell_value(0, 5, "3.1415")
165
+ @grid.set_cell_value(0, 6,
166
+ "The whole column to the left uses float format")
167
+
168
+ # Custom Editors Can be used
169
+ editor = Wx::GridCellNumberEditor.new(5, 20)
170
+ @grid.set_cell_value(3, 1, 'Number editor below')
171
+ @grid.set_cell_editor(4, 1, editor)
172
+
173
+ editor = Wx::GridCellFloatEditor.new(4, 2)
174
+ @grid.set_cell_value(3, 2, 'Float editor below')
175
+ @grid.set_cell_editor(4, 2, editor)
176
+
177
+ editor = Wx::GridCellChoiceEditor.new(['foo', 'bar', 'baz'])
178
+ @grid.set_cell_value(3, 3, 'Choice editor below')
179
+ @grid.set_cell_editor(4, 3, editor)
180
+
181
+ @grid.auto_size_row(3, true)
182
+
183
+ # Display of cells can be customised
184
+ @grid.set_cell_editor(6, 0, Wx::GridCellBoolEditor.new)
185
+ @grid.set_cell_renderer(6, 0, Wx::GridCellBoolRenderer.new)
186
+ @grid.set_cell_value(6, 1, 'Cell to the left displayed as boolean')
187
+ end
188
+
189
+ end
190
+
191
+ class GridApp < Wx::App
192
+ def on_init
193
+ frame = GridFrame.new(nil, -1, "Grid Sample",
194
+ Wx::Point.new(10, 100),
195
+ Wx::Size.new(630,400))
196
+
197
+ set_top_window(frame)
198
+ frame.show()
199
+ end
200
+ end
201
+
202
+ GridApp.new.main_loop()