wxruby3 0.9.0.pre.beta.14 → 0.9.0.pre.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/INSTALL.md +51 -22
  4. data/README.md +81 -6
  5. data/assets/hello_button-macos.png +0 -0
  6. data/assets/hello_button-msw.png +0 -0
  7. data/assets/hello_button.png +0 -0
  8. data/assets/hello_button_clicked-macos.png +0 -0
  9. data/assets/hello_button_clicked-msw.png +0 -0
  10. data/assets/hello_button_clicked.png +0 -0
  11. data/assets/hello_button_clicked_combi.png +0 -0
  12. data/assets/hello_world-macos.png +0 -0
  13. data/assets/hello_world-msw.png +0 -0
  14. data/assets/hello_world.png +0 -0
  15. data/assets/hello_world_combi.png +0 -0
  16. data/assets/repo-social-preview.png +0 -0
  17. data/ext/wxruby3/include/wxruby-runtime.h +1 -0
  18. data/ext/wxruby3/swig/memory_management.i +6 -10
  19. data/ext/wxruby3/swig/wx.i +17 -6
  20. data/lib/wx/core/art_locator.rb +2 -2
  21. data/lib/wx/core/artprovider.rb +2 -2
  22. data/lib/wx/core/bitmap.rb +6 -5
  23. data/lib/wx/core/bitmap_combobox.rb +34 -0
  24. data/lib/wx/core/brush.rb +6 -0
  25. data/lib/wx/core/controlwithitems.rb +52 -14
  26. data/lib/wx/core/cursor.rb +1 -1
  27. data/lib/wx/core/dc.rb +0 -20
  28. data/lib/wx/core/event_blocker.rb +14 -0
  29. data/lib/wx/core/evthandler.rb +48 -2
  30. data/lib/wx/core/find_replace_dialog.rb +24 -0
  31. data/lib/wx/core/font.rb +22 -14
  32. data/lib/wx/core/helpprovider.rb +2 -2
  33. data/lib/wx/core/icon.rb +1 -1
  34. data/lib/wx/core/image.rb +1 -1
  35. data/lib/wx/core/menu.rb +5 -0
  36. data/lib/wx/core/paintdc.rb +8 -0
  37. data/lib/wx/core/pen.rb +6 -0
  38. data/lib/wx/core/text_entry.rb +15 -0
  39. data/lib/wx/core/v_list_box.rb +13 -0
  40. data/lib/wx/core/window.rb +29 -2
  41. data/lib/wx/doc/app.rb +40 -0
  42. data/lib/wx/doc/brush.rb +17 -0
  43. data/lib/wx/doc/busy_info.rb +21 -0
  44. data/lib/wx/doc/client_dc.rb +28 -0
  45. data/lib/wx/doc/controlwithitems.rb +11 -0
  46. data/lib/wx/doc/dc.rb +0 -14
  47. data/lib/wx/doc/event_blocker.rb +27 -0
  48. data/lib/wx/doc/evthandler.rb +4 -0
  49. data/lib/wx/doc/extra/02_lifecycles.md +49 -0
  50. data/lib/wx/doc/extra/10_art.md +1 -1
  51. data/lib/wx/doc/extra/11_drawing_and_dc.md +62 -0
  52. data/lib/wx/doc/font.rb +27 -0
  53. data/lib/wx/doc/memory_dc.rb +75 -0
  54. data/lib/wx/doc/mirror_dc.rb +16 -0
  55. data/lib/wx/doc/pen.rb +17 -0
  56. data/lib/wx/doc/prt/printer_dc.rb +26 -0
  57. data/lib/wx/doc/radio_box.rb +20 -0
  58. data/lib/wx/doc/screen_dc.rb +10 -6
  59. data/lib/wx/doc/svg_file_dc.rb +20 -0
  60. data/lib/wx/doc/v_list_box.rb +9 -0
  61. data/lib/wx/doc/window.rb +27 -0
  62. data/lib/wx/doc/window_disabler.rb +10 -0
  63. data/lib/wx/html/keyword_defs.rb +6 -7
  64. data/lib/wx/html/require.rb +1 -0
  65. data/lib/wx/html/simple_html_listbox.rb +105 -0
  66. data/lib/wx/keyword_defs.rb +83 -75
  67. data/lib/wx/prt/keyword_defs.rb +5 -1
  68. data/lib/wx/version.rb +1 -1
  69. data/lib/wx/wxruby/cmd/test.rb +1 -1
  70. data/rakelib/install.rb +20 -7
  71. data/rakelib/lib/config/linux.rb +4 -2
  72. data/rakelib/lib/config/macosx.rb +120 -1
  73. data/rakelib/lib/config/mingw.rb +6 -1
  74. data/rakelib/lib/config/unixish.rb +26 -11
  75. data/rakelib/lib/config.rb +15 -6
  76. data/rakelib/lib/core/mapping.rb +5 -5
  77. data/rakelib/lib/core/package.rb +1 -1
  78. data/rakelib/lib/core/spec.rb +9 -5
  79. data/rakelib/lib/core/spec_helper.rb +9 -1
  80. data/rakelib/lib/director/accelerator.rb +1 -1
  81. data/rakelib/lib/director/app.rb +55 -4
  82. data/rakelib/lib/director/art_provider.rb +5 -1
  83. data/rakelib/lib/director/aui_pane_info.rb +1 -1
  84. data/rakelib/lib/director/aui_tab_ctrl.rb +1 -1
  85. data/rakelib/lib/director/aui_toolbar.rb +41 -0
  86. data/rakelib/lib/director/bitmap.rb +2 -1
  87. data/rakelib/lib/director/bitmap_combobox.rb +32 -0
  88. data/rakelib/lib/director/brush.rb +11 -1
  89. data/rakelib/lib/director/busy_info.rb +1 -1
  90. data/rakelib/lib/director/choice.rb +1 -0
  91. data/rakelib/lib/director/clipboard.rb +1 -1
  92. data/rakelib/lib/director/colour.rb +1 -0
  93. data/rakelib/lib/director/colour_picker_ctrl.rb +1 -1
  94. data/rakelib/lib/director/combobox.rb +2 -3
  95. data/rakelib/lib/director/context_help_button.rb +23 -0
  96. data/rakelib/lib/director/ctrl_with_items.rb +3 -0
  97. data/rakelib/lib/director/cursor.rb +1 -0
  98. data/rakelib/lib/director/data_object.rb +5 -7
  99. data/rakelib/lib/director/dc.rb +5 -1
  100. data/rakelib/lib/director/defs.rb +3 -0
  101. data/rakelib/lib/director/derived_dc.rb +278 -27
  102. data/rakelib/lib/director/dialog.rb +12 -3
  103. data/rakelib/lib/director/dir_picker_ctrl.rb +1 -1
  104. data/rakelib/lib/director/event.rb +3 -3
  105. data/rakelib/lib/director/event_blocker.rb +41 -0
  106. data/rakelib/lib/director/event_filter.rb +20 -0
  107. data/rakelib/lib/director/event_handler.rb +29 -2
  108. data/rakelib/lib/director/file_picker_ctrl.rb +1 -1
  109. data/rakelib/lib/director/find_replace_data.rb +1 -0
  110. data/rakelib/lib/director/font.rb +14 -4
  111. data/rakelib/lib/director/font_data.rb +1 -0
  112. data/rakelib/lib/director/font_picker_ctrl.rb +1 -1
  113. data/rakelib/lib/director/gdi_object.rb +1 -0
  114. data/rakelib/lib/director/graphics_context.rb +6 -6
  115. data/rakelib/lib/director/grid_table_message.rb +1 -1
  116. data/rakelib/lib/director/help_provider.rb +8 -10
  117. data/rakelib/lib/director/html_cell.rb +1 -1
  118. data/rakelib/lib/director/html_data_object.rb +5 -7
  119. data/rakelib/lib/director/html_listbox.rb +65 -1
  120. data/rakelib/lib/director/hyperlink_event.rb +22 -0
  121. data/rakelib/lib/director/icon.rb +2 -0
  122. data/rakelib/lib/director/listbox.rb +1 -0
  123. data/rakelib/lib/director/locale.rb +2 -1
  124. data/rakelib/lib/director/menu.rb +0 -3
  125. data/rakelib/lib/director/menu_bar.rb +3 -0
  126. data/rakelib/lib/director/palette.rb +1 -0
  127. data/rakelib/lib/director/pen.rb +12 -2
  128. data/rakelib/lib/director/pgproperties.rb +1 -1
  129. data/rakelib/lib/director/pgproperty.rb +1 -1
  130. data/rakelib/lib/director/pgvalidation_info.rb +1 -1
  131. data/rakelib/lib/director/platform_info.rb +1 -1
  132. data/rakelib/lib/director/popup_window.rb +18 -0
  133. data/rakelib/lib/director/print_data.rb +1 -1
  134. data/rakelib/lib/director/property_grid_interface.rb +1 -1
  135. data/rakelib/lib/director/property_grid_page_state.rb +1 -1
  136. data/rakelib/lib/director/radio_box.rb +15 -4
  137. data/rakelib/lib/director/region.rb +1 -0
  138. data/rakelib/lib/director/ribbon_art_provider.rb +1 -1
  139. data/rakelib/lib/director/richtext_buffer_data_object.rb +5 -7
  140. data/rakelib/lib/director/richtext_header_footer_data.rb +1 -1
  141. data/rakelib/lib/director/searchctrl.rb +25 -0
  142. data/rakelib/lib/director/sizer.rb +2 -2
  143. data/rakelib/lib/director/static_box.rb +1 -1
  144. data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
  145. data/rakelib/lib/director/text_entry.rb +7 -2
  146. data/rakelib/lib/director/textctrl.rb +1 -1
  147. data/rakelib/lib/director/tree_ctrl.rb +6 -3
  148. data/rakelib/lib/director/uiaction_simulator.rb +20 -0
  149. data/rakelib/lib/director/variant.rb +1 -1
  150. data/rakelib/lib/director/vlistbox.rb +25 -0
  151. data/rakelib/lib/director/window.rb +37 -7
  152. data/rakelib/lib/director/with_images.rb +1 -1
  153. data/rakelib/lib/director/xml_node.rb +1 -1
  154. data/rakelib/lib/extractor/function.rb +5 -3
  155. data/rakelib/lib/generate/doc/about_dialog_info.yaml +46 -0
  156. data/rakelib/lib/generate/doc/accelerator.yaml +21 -0
  157. data/rakelib/lib/generate/doc/art_provider.yaml +35 -0
  158. data/rakelib/lib/generate/doc/bitmap.yaml +37 -0
  159. data/rakelib/lib/generate/doc/box_sizer.yaml +15 -0
  160. data/rakelib/lib/generate/doc/busy_info.yaml +74 -0
  161. data/rakelib/lib/generate/doc/client_dc.yaml +19 -0
  162. data/rakelib/lib/generate/doc/clipboard.yaml +43 -0
  163. data/rakelib/lib/generate/doc/collapsible_pane.yaml +21 -0
  164. data/rakelib/lib/generate/doc/colour_dialog.yaml +32 -0
  165. data/rakelib/lib/generate/doc/context_help_button.yaml +16 -0
  166. data/rakelib/lib/generate/doc/control.yaml +46 -0
  167. data/rakelib/lib/generate/doc/cursor.yaml +40 -0
  168. data/rakelib/lib/generate/doc/data_object.yaml +55 -0
  169. data/rakelib/lib/generate/doc/dc.yaml +14 -0
  170. data/rakelib/lib/generate/doc/dialog.yaml +36 -0
  171. data/rakelib/lib/generate/doc/dir_dialog.yaml +25 -0
  172. data/rakelib/lib/generate/doc/event_blocker.yaml +27 -0
  173. data/rakelib/lib/generate/doc/event_filter.yaml +47 -0
  174. data/rakelib/lib/generate/doc/events.yaml +152 -0
  175. data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
  176. data/rakelib/lib/generate/doc/file_dialog.yaml +68 -0
  177. data/rakelib/lib/generate/doc.rb +77 -14
  178. data/rakelib/lib/generate/interface.rb +22 -10
  179. data/rakelib/lib/specs/interfaces.rb +9 -5
  180. data/rakelib/lib/swig_runner.rb +3 -3
  181. data/rakelib/lib/typemap/common.rb +15 -3
  182. data/rakelib/lib/util/string.rb +1 -0
  183. data/rakelib/yard/yard/relative_markdown_links.rb +5 -1
  184. data/samples/aui/aui.rb +432 -363
  185. data/samples/bigdemo/wxArtProvider.rbw +5 -4
  186. data/samples/controls/controls.rb +2 -2
  187. data/samples/controls/htlbox.rb +411 -0
  188. data/samples/controls/tn_htlbox.png +0 -0
  189. data/samples/drawing/graphics_drawing.rb +1 -2
  190. data/samples/drawing/{svgtest.rb → image_prt.rb} +49 -18
  191. data/samples/drawing/tn_image_prt.png +0 -0
  192. data/samples/propgrid/propgrid.rb +26 -21
  193. data/samples/ribbon/ribbon.rb +47 -46
  194. data/samples/sampler/editor.rb +33 -25
  195. data/samples/sampler/sample.rb +2 -2
  196. data/samples/sampler/stc_editor.rb +4 -2
  197. data/tests/lib/item_container_tests.rb +82 -0
  198. data/tests/lib/text_entry_tests.rb +80 -0
  199. data/tests/lib/wxapp_runner.rb +15 -3
  200. data/tests/lib/wxframe_runner.rb +144 -0
  201. data/tests/test_app_event_filter.rb +74 -0
  202. data/tests/test_art_provider.rb +52 -0
  203. data/tests/test_clipboard.rb +2 -1
  204. data/tests/test_event_handling.rb +199 -16
  205. data/tests/test_events.rb +4 -11
  206. data/tests/test_ext_controls.rb +28 -0
  207. data/tests/test_font.rb +239 -0
  208. data/tests/test_gdi_object.rb +161 -0
  209. data/tests/test_intl.rb +16 -15
  210. data/tests/test_item_data.rb +33 -1
  211. data/tests/test_std_controls.rb +373 -0
  212. data/tests/test_window.rb +340 -0
  213. metadata +82 -4
  214. data/samples/drawing/tn_svgtest.png +0 -0
@@ -0,0 +1,32 @@
1
+ ---
2
+ :wxColourDialog:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ # Some function for redrawing using the given colour. Ideally, it
11
+ # shouldn't do anything if the colour is the same as the one used
12
+ # before.
13
+ # def redraw(colour) ... end
14
+
15
+ data = Wx::ColourData.new
16
+ data.set_colour(initialColourToUse)
17
+ Wx::ColourDialog(self, data) do |dlg|
18
+ dlg.evt_colour_changed { |event| redraw(event.get_colour) }
19
+ if dlg.show_modal == Wx::ID_OK
20
+ # Colour did change.
21
+ else
22
+ # Colour didn't change.
23
+ end
24
+ end
25
+
26
+ # This call is unnecessary under platforms generating
27
+ # Wx::EVT_COLOUR_CHANGED if the dialog was accepted and unnecessary
28
+ # under the platforms not generating this event if it was cancelled,
29
+ # so we could check for the different cases explicitly to avoid it,
30
+ # but it's simpler to just always call it.
31
+ redraw(data.get_colour)
32
+ ```
@@ -0,0 +1,16 @@
1
+ ---
2
+ :wxContextHelp:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ # puts the application into a 'context-sensitive help mode' for my_window
11
+ context_help = Wx::ContextHelp.new(my_window)
12
+ ...
13
+ ...
14
+ # ends the 'context-sensitive help mode' for my_window
15
+ context_help.end_context_help
16
+ ```
@@ -0,0 +1,46 @@
1
+ ---
2
+ :wxControl.GetSizeFromTextSize:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ # Create a control for post code entry.
11
+ postcode = Wx::TextCtrl.new(self, ...)
12
+
13
+ # And set its initial and minimal size to be big enough for
14
+ # entering 5 digits.
15
+ postcode.set_initial_size(
16
+ postcode.get_size_from_text_size(
17
+ postcode.get_text_extent("99999")))
18
+ ```
19
+
20
+ :wxControl.GetSizeFromText:
21
+ :detail:
22
+ :pre:
23
+ :programlisting:
24
+ - :pattern: !ruby/regexp /.*/
25
+ :replace: |
26
+
27
+ ```ruby
28
+ def get_size_from_text(text)
29
+ get_size_from_text_size(get_text_extent(text))
30
+ end
31
+ ```
32
+
33
+ :wxControl.SetLabelMarkup:
34
+ :detail:
35
+ :pre:
36
+ :programlisting:
37
+ - :pattern: !ruby/regexp /.*/
38
+ :replace: |
39
+
40
+ ```ruby
41
+ text = Wx::StaticText.new
42
+ ...
43
+ text.set_label_markup("<b>&amp;Bed</b> &amp;mp; "+
44
+ "<span foreground='red'>breakfast</span> "+
45
+ "available <big>HERE</big>")
46
+ ```
@@ -0,0 +1,40 @@
1
+ ---
2
+ :wxCursor:
3
+ :detail:
4
+ :pre:
5
+ :detaileddescription:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+ As with icons, cursors in X and MS Windows are created in a different manner. Therefore, separate cursors
9
+ will be created for the different environments. Platform-specific methods for creating a {Wx::Cursor} object
10
+ are catered for, and this is an occasion where conditional compilation will probably be required
11
+ (see {Wx::Icon} for an example).
12
+ A single cursor object may be used in many windows (any subwindow type). The wxWidgets convention is to set
13
+ the cursor for a window, as in X, rather than to set it globally as in MS Windows, although a global
14
+ {set_cursor} function is also available for MS Windows use.
15
+
16
+ ===
17
+
18
+ Category: Graphics Device Interface (GDI)
19
+ Predefined objects/pointers:
20
+ - {Wx::NULL_CURSOR}
21
+ - {Wx::STANDARD_CURSOR}
22
+ - {Wx::HOURGLASS_CURSOR}
23
+ - {Wx::CROSS_CURSOR}
24
+ @see Wx::Bitmap
25
+ @see Wx::Icon
26
+ @see Wx::Window#set_cursor
27
+ @see Wx.set_cursor
28
+ @see Wx::StockCursor
29
+
30
+ :wxCursor.wxCursor:
31
+ :detail:
32
+ :pre:
33
+ :programlisting:
34
+ - :pattern: !ruby/regexp /.*/
35
+ :replace: |
36
+
37
+ ```ruby
38
+ image.set_option(Wx::IMAGE_OPTION_CUR_HOTSPOT_X, hotSpotX)
39
+ image.set_option(Wx::IMAGE_OPTION_CUR_HOTSPOT_X, hotSpotY)
40
+ ```
@@ -0,0 +1,55 @@
1
+ ---
2
+ :wxDataObjectComposite:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ class MyDropTarget < Wx::DropTarget
11
+
12
+ def initialize
13
+ dataobj = Wx::DataObjectComposite.new
14
+ dataobj.add(Wx::BitmapDataObject.new, true)
15
+ dataobj.add(Wx::FileDataObject.new)
16
+ set_data_object(dataobj)
17
+ end
18
+
19
+ def on_data(x, y, defaultDragResult)
20
+ return Wx::DragNone unless get_data
21
+
22
+ dataobj_comp = get_data_object
23
+
24
+ format = dataobj_comp.get_received_format
25
+ dataobj = dataobj_comp.get_object(format)
26
+ case format.get_type
27
+ when Wx::DataFormatId::DF_BITMAP
28
+ # dataobj is Wx::BitmapDataObject
29
+
30
+ ... use dataobj.get_bitmap ...
31
+
32
+ when Wx::DataFormatId::DF_FILENAME
33
+ # dataobj is Wx::FileDataObject
34
+
35
+ ... use dataobj->GetFilenames() ...
36
+
37
+ else
38
+ Wx.log_error("unexpected data object format")
39
+ end
40
+
41
+ defaultDragResult
42
+ end
43
+
44
+ end
45
+ ```
46
+ :wxURLDataObject:
47
+ :detail:
48
+ :pre:
49
+ :programlisting:
50
+ - :pattern: !ruby/regexp /.*/
51
+ :replace: |
52
+
53
+ ```ruby
54
+ Wx::Clipboard.open { |clip| clip.place(Wx::URLDataObject.new(url))
55
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ :wxDC.GetSize:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ sz = dc.get_dimensions
11
+ scaleX = (maxX.to_f / sz.width)
12
+ scaleY = (maxY.to_f / sz.height);
13
+ dc.set_user_scale([scaleX, scaleY].min,[scaleX, scaleY].min)
14
+ ```
@@ -0,0 +1,36 @@
1
+ ---
2
+ :wxDialog:
3
+ :detail:
4
+ :pre:
5
+ :para:
6
+ - :pattern: !ruby/regexp /Note\s+that\s+the\s+modal\s+dialog\s+is\s+one\s+of\s+the\s+very\s+few\s+examples/
7
+ :replace: |
8
+ Note that dialogs need to be explicitly destroyed when closed and not used anymore. The traditional code for this would be like:
9
+ :programlisting:
10
+ - :pattern: !ruby/regexp /MyAskDialog.*\*dlg/
11
+ :replace: |
12
+
13
+ ```ruby
14
+ def ask_user
15
+ dlg = MyAskDialog.new(...)
16
+ if dlg.show_modal == Wx::ID_OK
17
+ # ...
18
+ #else: dialog was cancelled or some another button pressed
19
+ end
20
+
21
+ dlg.destroy
22
+ end
23
+ ```
24
+ - :pattern: !ruby/regexp /dlg\.ShowModal\(\)/
25
+ :replace: |
26
+
27
+ ```ruby
28
+ def ask_user
29
+ MyAskDialog(...) do |dlg|
30
+ if dlg.show_modal == Wx::ID_OK
31
+ # ...
32
+ #else: dialog was cancelled or some another button pressed
33
+ end
34
+ end
35
+ end
36
+ ```
@@ -0,0 +1,25 @@
1
+ ---
2
+ :wxDirSelector:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ dir = Wx.dir_selector('Choose a folder')
11
+ unless dir.empty?
12
+ ...
13
+ end
14
+ ```
15
+ :wxDirDialog:
16
+ :detail:
17
+ :pre:
18
+ :programlisting:
19
+ - :pattern: !ruby/regexp /.*/
20
+ :replace: |
21
+
22
+ ```ruby
23
+ Wx::DirDialog(nil, 'Choose input directory', '',
24
+ Wx::DD_DEFAULT_STYLE | Wx::DD_DIR_MUST_EXIST)
25
+ ```
@@ -0,0 +1,27 @@
1
+ ---
2
+ :wxEventBlocker:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ class MyWindow
11
+
12
+ ...
13
+
14
+ def do_something
15
+ # block all events directed to this window
16
+ Wx::EventBlocker.blocked_for(self) do
17
+ # while we do 1000 function_that_sends_events calls
18
+ 1000.times { |i| function_that_sends_events(i) }
19
+ end
20
+ # old event handler restored; generated event(s) from next call will be processed
21
+ function_that_sends_events(0)
22
+ end
23
+
24
+ ...
25
+
26
+ end
27
+ ```
@@ -0,0 +1,47 @@
1
+ ---
2
+ :wxEventFilter:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ # This class allows determining the last time the user has worked with
11
+ # this application:
12
+ class LastActivityTimeDetector < Wx::EventFilter
13
+ def initialize
14
+ Wx::EvtHandler.add_filter(self)
15
+
16
+ @last = Time.now
17
+ end
18
+
19
+ def clear
20
+ Wx::EvtHandler.remove_filter(self)
21
+ end
22
+
23
+ def filter_event(event)
24
+ # Update the last user activity
25
+ t = event.get_event_type
26
+ case t
27
+ when Wx::EVT_KEY_DOWN,
28
+ Wx::EVT_MOTION,
29
+ Wx::EVT_LEFT_DOWN,
30
+ Wx::EVT_RIGHT_DOWN,
31
+ Wx::EVT_MIDDLE_DOWN
32
+ @last = Time.now
33
+ end
34
+
35
+ # Continue processing the event normally as well.
36
+ Event_Skip
37
+ end
38
+
39
+ # This function could be called periodically from some timer to
40
+ # do something (e.g. hide sensitive data or log out from remote
41
+ # server) if the user has been inactive for some time period.
42
+ def is_inactive_for?(diff)
43
+ (Time.now - diff) > @last
44
+ end
45
+
46
+ end
47
+ ```
@@ -0,0 +1,152 @@
1
+ ---
2
+ :wxKeyEvent.GetKeyCode:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ def on_char(event)
11
+ uc = event.get_unicode_key
12
+ if uc
13
+ # It's a "normal" character. Notice that this includes
14
+ # control characters in 1..31 range, e.g. Wx::K_RETURN or
15
+ # Wx::K_BACK, so check for them explicitly.
16
+ if uc.ord >= 32
17
+ Wx.log_message("You pressed '#{uc}'")
18
+ else
19
+ # It's a control character
20
+ ...
21
+ end
22
+ else # No Unicode equivalent.
23
+ # It's a special key, deal with all the known ones:
24
+ case event.get_key_code
25
+ when Wx::K_LEFT, Wx::K_RIGHT
26
+ ... move cursor ...
27
+
28
+ when Wx::K_F1:
29
+ ... give help ...
30
+ end
31
+ end
32
+ end
33
+ ```
34
+ :post:
35
+ - :pattern: !ruby/regexp /returns\s+\{Wx::K_NONE\}\)/
36
+ :subst: 'returns nil)'
37
+ :wxKeyEvent.GetUnicodeKey:
38
+ :detail:
39
+ :post:
40
+ - :pattern: !ruby/regexp /return\s+\{Wx::K_NONE\}\./
41
+ :subst: 'return nil.'
42
+ :wxKeyEvent.GetModifiers:
43
+ :detail:
44
+ :pre:
45
+ :programlisting:
46
+ - :pattern: !ruby/regexp /ControlDown/
47
+ :replace: |
48
+
49
+ ```ruby
50
+ if event.control_down && !event.alt_down && !event.shift_down && !event.meta_down
51
+ # ... handle Ctrl-XXX ...
52
+ ```
53
+ - :pattern: !ruby/regexp /GetModifiers/
54
+ :replace: |
55
+
56
+ ```ruby
57
+ if event.get_modifiers == Wx::KeyModifier::MOD_CONTROL
58
+ # ... handle Ctrl-XXX ...
59
+ ```
60
+ :wxMouseEvent.GetModifiers:
61
+ :detail:
62
+ :pre:
63
+ :programlisting:
64
+ - :pattern: !ruby/regexp /ControlDown/
65
+ :replace: |
66
+
67
+ ```ruby
68
+ if event.control_down && !event.alt_down && !event.shift_down && !event.meta_down
69
+ # ... handle Ctrl-XXX ...
70
+ ```
71
+ - :pattern: !ruby/regexp /GetModifiers/
72
+ :replace: |
73
+
74
+ ```ruby
75
+ if event.get_modifiers == Wx::KeyModifier::MOD_CONTROL
76
+ # ... handle Ctrl-XXX ...
77
+ ```
78
+ :wxUpdateUIEvent.IsCheckable:
79
+ :detail:
80
+ :pre:
81
+ :programlisting:
82
+ - :pattern: !ruby/regexp /.*/
83
+ :replace: |
84
+
85
+ ```ruby
86
+ def on_update_ui(event)
87
+ ....
88
+ if event.is_checkable
89
+ event.check(...some condition...)
90
+ end
91
+ ```
92
+ :wxPaintEvent:
93
+ :detail:
94
+ :pre:
95
+ :programlisting:
96
+ - :pattern: !ruby/regexp /DrawMyDocument/
97
+ :replace: |
98
+
99
+ ```ruby
100
+ def on_paint(event)
101
+ self.pain do |dc|
102
+ draw_my_document(dc)
103
+ end
104
+ end
105
+ ```
106
+ - :pattern: !ruby/regexp /GetViewStart/
107
+ :replace: |
108
+
109
+ ```ruby
110
+ # Called when window needs to be repainted.
111
+ def on_paint(event)
112
+ self.paint do |dc|
113
+ # Find Out where the window has scrolled to
114
+ vb_pt = get_view_start # Top left corner of client
115
+
116
+ Wx::RegionIterator.for_region(get_update_region) do |region_it|
117
+
118
+ int vX,vY,vW,vH
119
+ wxRegionIterator upd(GetUpdateRegion()) # get the update rect list
120
+
121
+ region_it.each do |rct|
122
+ # rct == Dimensions of client area to repaint in pixels
123
+
124
+ # Repaint this rectangle
125
+ ...some code...
126
+ end
127
+ end
128
+ end
129
+ end
130
+ ```
131
+ :wxCloseEvent:
132
+ :detail:
133
+ :pre:
134
+ :programlisting:
135
+ - :pattern: !ruby/regexp /.*/
136
+ :replace: |
137
+
138
+ ```ruby
139
+ def on_close(event)
140
+ if event.can_veto? && @file_not_saved
141
+ if Wx.message_box("The file has not been saved... continue closing?",
142
+ "Please confirm",
143
+ Wx::ICON_QUESTION | Wx::YES_NO) != Wx::YES)
144
+ event.veto
145
+ return
146
+ end
147
+ end
148
+
149
+ destroy # you may also do: event.skip
150
+ # since the default event handler does call #destroy too
151
+ end
152
+ ```
@@ -0,0 +1,63 @@
1
+ ---
2
+ :wxEvtHandler.QueueEvent:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: ''
8
+ :post:
9
+ - :pattern: !ruby/regexp /This\s+implies\s+that\s+the\s+event\s+should\s+be\s+allocated\s+on\s+the\s+heap\s+and/
10
+ :subst: 'This implies'
11
+ - :pattern: !ruby/regexp /\{Wx::EvtHandler#queue_event\}.*For\s+example:/
12
+ :subst: ''
13
+ - :pattern: !ruby/regexp /Note.*problem:/
14
+ :subst: ''
15
+ :wxEvtHandler.SetNextHandler:
16
+ :detail:
17
+ :pre:
18
+ :programlisting:
19
+ - :pattern: !ruby/regexp /.*/
20
+ :replace: |
21
+
22
+ ```ruby
23
+ handlerA.set_next_handler(handlerB)
24
+ handlerB.set_previous_handler(handlerA)
25
+ ```
26
+ :wxEvtHandler.TryBefore:
27
+ :detail:
28
+ :pre:
29
+ :programlisting:
30
+ - :pattern: !ruby/regexp /.*/
31
+ :replace: |
32
+
33
+ ```ruby
34
+ class MyClass < BaseClass # inheriting from Wx::EvtHandler
35
+ ...
36
+ protected
37
+ def try_before(event)
38
+ if my_pre_process(event)
39
+ return true
40
+
41
+ super
42
+ end
43
+ end
44
+ ```
45
+ :wxEvtHandler.TryAfter:
46
+ :detail:
47
+ :pre:
48
+ :programlisting:
49
+ - :pattern: !ruby/regexp /.*/
50
+ :replace: |
51
+
52
+ ```ruby
53
+ class MyClass < BaseClass # inheriting from Wx::EvtHandler
54
+ ...
55
+ protected
56
+ def try_after(event)
57
+ if super
58
+ return true
59
+
60
+ my_post_process(event)
61
+ end
62
+ end
63
+ ```
@@ -0,0 +1,68 @@
1
+ ---
2
+ :wxFileDialog:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /MyFrame::OnOpen/
7
+ :replace: |
8
+
9
+ ```ruby
10
+ class MyFrame
11
+ ...
12
+ def on_open(event)
13
+ if (...current content has not been saved...)
14
+ if Wx.message_box('Current content has not been saved! Proceed?', 'Please confirm',
15
+ Wx::ICON_QUESTION | Wx::YES_NO, self) == Wx::NO
16
+ return
17
+ #else: proceed asking to the user the new file to open
18
+ end
19
+ end
20
+
21
+ Wx::FileDialog(self, "Open XYZ file", "", "",
22
+ "XYZ files (*.xyz)|*.xyz", Wx::FD_OPEN|Wx::FD_FILE_MUST_EXIST) do |dlg|
23
+ return if dlg.show_modal == Wx::ID_CANCEL # the user changed idea...?
24
+
25
+ # proceed loading the file chosen by the user
26
+ file = File.open(dlg.path, 'r') rescue nil
27
+ unless file
28
+ Wx.log_error("Cannot open file '#{dlg.path}'.")
29
+ return
30
+ end
31
+ ...
32
+ end
33
+ end
34
+
35
+ end
36
+ ```
37
+ - :pattern: !ruby/regexp /MyFrame::OnSaveAs/
38
+ :replace: |
39
+
40
+ ```ruby
41
+ class MyFrame
42
+ ...
43
+ def on_save_as(event)
44
+ Wx::FileDialog(self, "Save XYZ file", "", "",
45
+ "XYZ files (*.xyz)|*.xyz", Wx::FD_SAVE|Wx::FD_OVERWRITE_PROMPT) do |dlg|
46
+ return if dlg.show_modal == Wx::ID_CANCEL # the user changed idea...?
47
+
48
+ # save the current contents in the file
49
+ begin
50
+ File.open(dlg.path, 'w+') do |f|
51
+ # save to file
52
+ end
53
+ rescue
54
+ Wx.log_error("Cannot save current contents in file '#{dlg.path}'.")
55
+ return
56
+ end
57
+ end
58
+ ...
59
+ end
60
+
61
+ end
62
+ ```
63
+ - :pattern: !ruby/regexp /wxSystemOptions::SetOption/
64
+ :replace: |
65
+
66
+ ```ruby
67
+ Wx::SystemOptions.set_option(Wx::OSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1)
68
+ ```