gtk_paradise 0.9.120 → 0.11.19

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of gtk_paradise might be problematic. Click here for more details.

Files changed (492) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4521 -2997
  3. data/bin/genity +26 -0
  4. data/bin/gtk_editor +7 -0
  5. data/doc/README.gen +4484 -2975
  6. data/doc/todo/TODO_FOR_THE_GTK_PARADISE_PROJECT.md +281 -218
  7. data/doc/todo/recurring_todo_tasks.md +4 -3
  8. data/gtk_paradise.gemspec +28 -17
  9. data/lib/gtk_paradise/app/app.rb +77 -45
  10. data/lib/gtk_paradise/app/{app_module.rb → app_module/app_module.rb} +1064 -899
  11. data/lib/gtk_paradise/base_module/base_module.rb +7043 -33
  12. data/lib/gtk_paradise/base_module/class_methods/class_methods.rb +0 -0
  13. data/lib/gtk_paradise/base_module/css.rb +200 -268
  14. data/lib/gtk_paradise/base_module/experimental.rb +119 -0
  15. data/lib/gtk_paradise/base_module/html_support.rb +40 -15
  16. data/lib/gtk_paradise/base_module/these_methods_work_for_gtk3_and_gtk4.rb +155 -0
  17. data/lib/gtk_paradise/base_module_and_app_module/base_module_and_app_module.rb +1 -1
  18. data/lib/gtk_paradise/colours/colour_palette/material_design.rb +239 -0
  19. data/lib/gtk_paradise/colours/gtk_colour_constants.rb +8 -2
  20. data/lib/gtk_paradise/colours/parse.rb +8 -1
  21. data/lib/gtk_paradise/commandline/commandline.rb +20 -19
  22. data/lib/gtk_paradise/constants/constants.rb +227 -7
  23. data/lib/gtk_paradise/css_files/borders.css +81 -0
  24. data/lib/gtk_paradise/css_files/colours.css +329 -328
  25. data/lib/gtk_paradise/css_files/css_accordion.css +6 -2
  26. data/lib/gtk_paradise/css_files/hover_effects.css +588 -0
  27. data/lib/gtk_paradise/css_files/project.css +153 -189
  28. data/lib/gtk_paradise/drawing/README.md +3 -0
  29. data/lib/gtk_paradise/drawing/drawing.rb +68 -0
  30. data/lib/gtk_paradise/{base_module/colours.rb → drawing/event.rb} +37 -45
  31. data/lib/gtk_paradise/drawing/star.rb +96 -0
  32. data/lib/gtk_paradise/drawing/tool.rb +268 -0
  33. data/lib/gtk_paradise/drawing/turtle.rb +138 -0
  34. data/lib/gtk_paradise/emojis/emojis.rb +14 -13
  35. data/lib/gtk_paradise/examples/advanced/001_5x5_grid_example.rb +35 -50
  36. data/lib/gtk_paradise/examples/advanced/002_advanced_drag_and_drop_example.rb +21 -13
  37. data/lib/gtk_paradise/examples/advanced/003_html_like_support.rb +4 -25
  38. data/lib/gtk_paradise/examples/advanced/004_on_hover_example_on_gtk_entry.rb +4 -4
  39. data/lib/gtk_paradise/examples/advanced/005_csv_example.rb +6 -2
  40. data/lib/gtk_paradise/examples/advanced/007_label_responding_to_events_example.rb +1 -10
  41. data/lib/gtk_paradise/examples/advanced/008_options_example.rb +6 -3
  42. data/lib/gtk_paradise/examples/advanced/009_key_events.rb +1 -1
  43. data/lib/gtk_paradise/examples/advanced/010_extensive_text_view_example.rb +18 -17
  44. data/lib/gtk_paradise/examples/advanced/011_moving_blocks_example.rb +3 -3
  45. data/lib/gtk_paradise/examples/advanced/012_cell_data_sorting_example.rb +3 -4
  46. data/lib/gtk_paradise/examples/advanced/013_advanced_css_example.rb +86 -49
  47. data/lib/gtk_paradise/examples/advanced/014_popup_example.rb +9 -9
  48. data/lib/gtk_paradise/examples/advanced/015_advanced_button_example.rb +7 -19
  49. data/lib/gtk_paradise/examples/advanced/017_lean_CSS_example.rb +10 -13
  50. data/lib/gtk_paradise/examples/advanced/018_coloured_text_example.rb +7 -13
  51. data/lib/gtk_paradise/examples/advanced/019_gtk_entry_showing_the_cursor_position.rb +1 -1
  52. data/lib/gtk_paradise/examples/advanced/020_scale_this_image.rb +1 -10
  53. data/lib/gtk_paradise/examples/advanced/021_scroll_events_on_gtk_entry.rb +4 -0
  54. data/lib/gtk_paradise/examples/advanced/022_autogenerated_CSS_rounded_borders.rb +142 -0
  55. data/lib/gtk_paradise/examples/advanced/023_append_image_to_buffer.rb +145 -0
  56. data/lib/gtk_paradise/examples/advanced/024_notebook_with_tab_example.rb +151 -0
  57. data/lib/gtk_paradise/examples/advanced/025_showing_a_gold_caret_on_black_background.rb +144 -0
  58. data/lib/gtk_paradise/examples/advanced/026_status_bar_example.rb +153 -0
  59. data/lib/gtk_paradise/examples/advanced/027_customized_frame_example.rb +141 -0
  60. data/lib/gtk_paradise/examples/advanced/028_widgets_described_in_a_yaml_file.rb +240 -0
  61. data/lib/gtk_paradise/examples/cairo/basic_cairo_shapes.rb +1 -1
  62. data/lib/gtk_paradise/examples/cairo/cairo_transparent_rectangles.rb +9 -5
  63. data/lib/gtk_paradise/examples/cairo/cairo_write_via_custom_font.rb +81 -0
  64. data/lib/gtk_paradise/examples/cairo/donut_shape.rb +19 -6
  65. data/lib/gtk_paradise/examples/cairo/ping_pong_game.rb +2 -3
  66. data/lib/gtk_paradise/examples/controller/README.md +4 -0
  67. data/lib/gtk_paradise/examples/controller/controller.rb +2 -0
  68. data/lib/gtk_paradise/examples/css/001_border_examples.rb +30 -13
  69. data/lib/gtk_paradise/examples/css/002_import_CSS_file.rb +10 -5
  70. data/lib/gtk_paradise/examples/drawing/001_example.rb +61 -0
  71. data/lib/gtk_paradise/examples/drawing/002_example.rb +51 -0
  72. data/lib/gtk_paradise/examples/drawing/003_example.rb +38 -0
  73. data/lib/gtk_paradise/examples/drawing/004_example.rb +36 -0
  74. data/lib/gtk_paradise/examples/drawing/005_example.rb +92 -0
  75. data/lib/gtk_paradise/examples/drawing/006_example.rb +58 -0
  76. data/lib/gtk_paradise/examples/drawing/007_example.rb +22 -0
  77. data/lib/gtk_paradise/examples/drawing/008_example.rb +43 -0
  78. data/lib/gtk_paradise/examples/drawing/009_example.rb +43 -0
  79. data/lib/gtk_paradise/examples/drawing/010_example.rb +25 -0
  80. data/lib/gtk_paradise/examples/drawing/011_example.rb +72 -0
  81. data/lib/gtk_paradise/examples/drawing/012_example.rb +59 -0
  82. data/lib/gtk_paradise/examples/drawing/README.md +3 -0
  83. data/lib/gtk_paradise/examples/drawing/moving_turtle_example.rb +43 -0
  84. data/lib/gtk_paradise/examples/gdk/001_gdk_screen_properties.rb +58 -0
  85. data/lib/gtk_paradise/examples/gdk_pixbuf/save_image_example.rb +1 -1
  86. data/lib/gtk_paradise/examples/gir_ffi/001_hello_world.rb +29 -0
  87. data/lib/gtk_paradise/examples/gir_ffi/002_upgraded_hello_world.rb +40 -0
  88. data/lib/gtk_paradise/examples/gir_ffi/003_gtk_application_example.rb +30 -0
  89. data/lib/gtk_paradise/examples/gir_ffi/004_treeview_example.rb +64 -0
  90. data/lib/gtk_paradise/examples/gir_ffi/005_complex_example.rb +104 -0
  91. data/lib/gtk_paradise/examples/gir_ffi/README.md +5 -0
  92. data/lib/gtk_paradise/examples/glib/parse_glib_settings.rb +1 -1
  93. data/lib/gtk_paradise/examples/gtk2/008_list_store_example.rb +1 -1
  94. data/lib/gtk_paradise/examples/gtk3/{061_gtk_entry.rb → 001_gtk_entry.rb} +11 -6
  95. data/lib/gtk_paradise/examples/gtk3/{009_scrolled_window_example.rb → 002_scrolled_window_example.rb} +6 -4
  96. data/lib/gtk_paradise/examples/gtk3/{062_toggle_button_example.rb → 003_toggle_button_example.rb} +3 -2
  97. data/lib/gtk_paradise/examples/gtk3/{081_simple_dialog_example.rb → 004_simple_dialog_example.rb} +19 -12
  98. data/lib/gtk_paradise/examples/gtk3/005_spinner_example.rb +30 -10
  99. data/lib/gtk_paradise/examples/gtk3/006_text_view_example.rb +78 -0
  100. data/lib/gtk_paradise/examples/gtk3/{079_two_windows_example.rb → 007_two_windows_example.rb} +3 -1
  101. data/lib/gtk_paradise/examples/gtk3/008_search_bar_example.rb +91 -0
  102. data/lib/gtk_paradise/examples/gtk3/{002_simple_window.rb → 009_simple_window.rb} +14 -6
  103. data/lib/gtk_paradise/examples/gtk3/{025_switch_example.rb → 010_switch_example.rb} +6 -7
  104. data/lib/gtk_paradise/examples/gtk3/011_colour_chooser_example.rb +71 -0
  105. data/lib/gtk_paradise/examples/gtk3/012_show_the_xid_example.rb +18 -0
  106. data/lib/gtk_paradise/examples/gtk3/013_grab_pointer_forcefully.rb +31 -0
  107. data/lib/gtk_paradise/examples/gtk3/{083_bottom_left_placement.rb → 015_bottom_left_placement.rb} +3 -1
  108. data/lib/gtk_paradise/examples/gtk3/{082_scrolling_example.rb → 016_scrolling_example.rb} +2 -2
  109. data/lib/gtk_paradise/examples/gtk3/{080_extensive_markup_example.rb → 017_extensive_markup_example.rb} +8 -7
  110. data/lib/gtk_paradise/examples/gtk3/{078_message_dialog_example.rb → 018_message_dialog_example.rb} +3 -5
  111. data/lib/gtk_paradise/examples/gtk3/{075_tiny_button_via_css.rb → 021_tiny_button_via_css.rb} +1 -0
  112. data/lib/gtk_paradise/examples/gtk3/{001_font_related_information.rb → 022_font_related_information.rb} +1 -1
  113. data/lib/gtk_paradise/examples/gtk3/023_sorted_tree.rb +166 -0
  114. data/lib/gtk_paradise/examples/gtk3/{004_small_paned_example.rb → 024_small_paned_example.rb} +4 -3
  115. data/lib/gtk_paradise/examples/gtk3/{007_progress_bar_example.rb → 026_progress_bar_example.rb} +1 -2
  116. data/lib/gtk_paradise/examples/gtk3/{008_menubar_example.rb → 027_menubar_example.rb} +1 -1
  117. data/lib/gtk_paradise/examples/gtk3/{010_paned_widget_example.rb → 028_paned_widget_example.rb} +1 -0
  118. data/lib/gtk_paradise/examples/gtk3/{011_sockets.rb → 029_sockets.rb} +1 -0
  119. data/lib/gtk_paradise/examples/gtk3/{012_notebook_example.rb → 030_notebook_example.rb} +1 -0
  120. data/lib/gtk_paradise/examples/gtk3/{013_icon_theme_example.rb → 031_icon_theme_example.rb} +6 -0
  121. data/lib/gtk_paradise/examples/gtk3/{014_switcher_window.rb → 032_switcher_window.rb} +16 -10
  122. data/lib/gtk_paradise/examples/gtk3/{016_hello_world_in_gtk3_and_bold_font.rb → 034_hello_world_in_gtk3_and_bold_font.rb} +1 -1
  123. data/lib/gtk_paradise/examples/gtk3/{017_grid_example.rb → 035_grid_example.rb} +5 -1
  124. data/lib/gtk_paradise/examples/gtk3/{018_buttons_showcasing_the_relief.rb → 036_buttons_showcasing_the_relief.rb} +1 -0
  125. data/lib/gtk_paradise/examples/gtk3/{019_text_buffer_example.rb → 037_text_buffer_example.rb} +12 -10
  126. data/lib/gtk_paradise/examples/gtk3/{022_popup_example.rb → 040_popup_example.rb} +2 -2
  127. data/lib/gtk_paradise/examples/gtk3/{023_horizontal_and_vertical_scale.rb → 041_horizontal_and_vertical_scale.rb} +1 -1
  128. data/lib/gtk_paradise/examples/gtk3/{026_hover_button_example_via_css.rb → 043_hover_button_example_via_css.rb} +3 -1
  129. data/lib/gtk_paradise/examples/gtk3/{027_spin_button_example.rb → 044_spin_button_example.rb} +4 -3
  130. data/lib/gtk_paradise/examples/gtk3/{028_radio_menu_item_example.rb → 045_radio_menu_item_example.rb} +4 -1
  131. data/lib/gtk_paradise/examples/gtk3/{029_gtk_dialog_sample.rb → 046_gtk_dialog_sample.rb} +4 -1
  132. data/lib/gtk_paradise/examples/gtk3/{030_draw_rectangles.rb → 047_draw_rectangles.rb} +1 -1
  133. data/lib/gtk_paradise/examples/gtk3/{031_colour_choose_button.rb → 048_colour_choose_button.rb} +17 -3
  134. data/lib/gtk_paradise/examples/gtk3/{032_drag_and_drop_example.rb → 049_drag_and_drop_example.rb} +13 -5
  135. data/lib/gtk_paradise/examples/gtk3/{033_cell_renderer_pixbuf_example.rb → 050_cell_renderer_pixbuf_example.rb} +17 -6
  136. data/lib/gtk_paradise/examples/gtk3/051_combo_box_example.rb +74 -0
  137. data/lib/gtk_paradise/examples/gtk3/{037_css_example_of_a_button_changing_the_background_colour_on_click_event.rb → 053_css_example_of_a_button_changing_the_background_colour_on_click_event.rb} +14 -4
  138. data/lib/gtk_paradise/examples/gtk3/{036_revealer_example.rb → 053_revealer_example.rb} +10 -6
  139. data/lib/gtk_paradise/examples/gtk3/{038_ten_labels_in_a_vertical_box_example.rb → 054_ten_labels_in_a_vertical_box_example.rb} +1 -1
  140. data/lib/gtk_paradise/examples/gtk3/{039_threads_example.rb → 055_threads_example.rb} +1 -1
  141. data/lib/gtk_paradise/examples/gtk3/{042_colourized_button_example.rb → 058_colourized_button_example.rb} +1 -2
  142. data/lib/gtk_paradise/examples/gtk3/{043_form_example.rb → 059_form_example.rb} +1 -3
  143. data/lib/gtk_paradise/examples/gtk3/{044_check_button.rb → 060_check_button.rb} +4 -2
  144. data/lib/gtk_paradise/examples/gtk3/{046_event_box_example.rb → 062_event_box_example.rb} +2 -1
  145. data/lib/gtk_paradise/examples/gtk3/{047_examples_with_css.rb → 063_examples_with_css.rb} +91 -3
  146. data/lib/gtk_paradise/examples/gtk3/{048_accel_group_example.rb → 064_accel_group_example.rb} +1 -0
  147. data/lib/gtk_paradise/examples/gtk3/{049_change_the_application_theme.rb → 065_change_the_application_theme.rb} +4 -2
  148. data/lib/gtk_paradise/examples/gtk3/{050_header_bar_example.rb → 066_header_bar_example.rb} +3 -0
  149. data/lib/gtk_paradise/examples/gtk3/{051_gtk_label_example.rb → 067_gtk_label_example.rb} +3 -2
  150. data/lib/gtk_paradise/examples/gtk3/{052_popover_example.rb → 068_popover_example.rb} +2 -2
  151. data/lib/gtk_paradise/examples/gtk3/{053_entry_completion.rb → 069_entry_completion.rb} +2 -0
  152. data/lib/gtk_paradise/examples/gtk3/{055_button_demo.rb → 071_button_demo.rb} +6 -5
  153. data/lib/gtk_paradise/examples/gtk3/{056_text_iterator_example.rb → 072_text_iterator_example.rb} +30 -21
  154. data/lib/gtk_paradise/examples/gtk3/{057_image_example.rb → 073_image_example.rb} +1 -1
  155. data/lib/gtk_paradise/examples/gtk3/{058_frame_example.rb → 074_frame_example.rb} +1 -1
  156. data/lib/gtk_paradise/examples/gtk3/{059_gtk_expander.rb → 075_gtk_expander.rb} +2 -0
  157. data/lib/gtk_paradise/examples/gtk3/{060_ten_vboxes_example.rb → 076_ten_vboxes_example.rb} +1 -0
  158. data/lib/gtk_paradise/examples/gtk3/{063_button_box_example.rb → 077_button_box_example.rb} +11 -1
  159. data/lib/gtk_paradise/examples/gtk3/{064_tree_view_column_example.rb → 078_tree_view_column_example.rb} +2 -1
  160. data/lib/gtk_paradise/examples/gtk3/{066_vertical_boxes.rb → 080_vertical_boxes.rb} +2 -1
  161. data/lib/gtk_paradise/examples/gtk3/{067_vbox_with_spacing_and_border_width.rb → 081_vbox_with_spacing_and_border_width.rb} +2 -1
  162. data/lib/gtk_paradise/examples/gtk3/{069_file_chooser_dialog.rb → 082_file_chooser_dialog.rb} +3 -0
  163. data/lib/gtk_paradise/examples/gtk3/{070_bindings.rb → 083_bindings.rb} +14 -8
  164. data/lib/gtk_paradise/examples/gtk3/{072_recent_chooser_dialog.rb → 084_recent_chooser_dialog.rb} +2 -2
  165. data/lib/gtk_paradise/examples/gtk3/{073_showcase_the_cursors.rb → 085_showcase_the_cursors.rb} +30 -5
  166. data/lib/gtk_paradise/examples/gtk3/{074_app_chooser_button_example.rb → 086_app_chooser_button_example.rb} +1 -0
  167. data/lib/gtk_paradise/examples/gtk3/087_calendar_example.rb +41 -0
  168. data/lib/gtk_paradise/examples/gtk4/001_gtk_entry.rb +88 -0
  169. data/lib/gtk_paradise/examples/gtk4/002_scrolled_window_example.rb +62 -0
  170. data/lib/gtk_paradise/examples/gtk4/003_toggle_button_example.rb +23 -0
  171. data/lib/gtk_paradise/examples/gtk4/004_simple_dialog_example.rb +41 -0
  172. data/lib/gtk_paradise/examples/gtk4/005_spinner_example.rb +64 -0
  173. data/lib/gtk_paradise/examples/gtk4/006_text_view_example.rb +77 -0
  174. data/lib/gtk_paradise/examples/gtk4/007_two_windows_example.rb +55 -0
  175. data/lib/gtk_paradise/examples/gtk4/008_search_bar_example.rb +88 -0
  176. data/lib/gtk_paradise/examples/gtk4/009_text_view_example.rb +30 -0
  177. data/lib/gtk_paradise/examples/gtk4/010_switch_example.rb +52 -0
  178. data/lib/gtk_paradise/examples/gtk4/074_frame_example.rb +105 -0
  179. data/lib/gtk_paradise/examples/gtk4/076_ten_vboxes_example.rb +35 -0
  180. data/lib/gtk_paradise/examples/gtk4/087_calendar_example.rb +47 -0
  181. data/lib/gtk_paradise/examples/gtk4/100_changed_events_example.rb +77 -0
  182. data/lib/gtk_paradise/examples/gtk4/101_actionbar_example.rb +55 -0
  183. data/lib/gtk_paradise/examples/gtk4/102_picture_example.rb +35 -0
  184. data/lib/gtk_paradise/examples/pango/pango_power.rb +1 -0
  185. data/lib/gtk_paradise/experimental/experimental.rb +3 -11
  186. data/lib/gtk_paradise/experimental/experimental_for_gtk4.rb +92 -0
  187. data/lib/gtk_paradise/fonts/fonts.rb +5 -1
  188. data/lib/gtk_paradise/gdk/cursor.rb +2 -2
  189. data/lib/gtk_paradise/{base_module/e.rb → gdk/event_crossing.rb} +6 -8
  190. data/lib/gtk_paradise/gdk/gdk.rb +1 -1
  191. data/lib/gtk_paradise/gtk_classes/about.rb +11 -2
  192. data/lib/gtk_paradise/gtk_classes/about_dialog.rb +6 -2
  193. data/lib/gtk_paradise/gtk_classes/alignment.rb +4 -1
  194. data/lib/gtk_paradise/gtk_classes/application.rb +94 -4
  195. data/lib/gtk_paradise/gtk_classes/application_window.rb +25 -0
  196. data/lib/gtk_paradise/gtk_classes/box.rb +116 -279
  197. data/lib/gtk_paradise/gtk_classes/button.rb +55 -37
  198. data/lib/gtk_paradise/gtk_classes/button_box.rb +9 -1
  199. data/lib/gtk_paradise/gtk_classes/cell_renderer_text.rb +5 -3
  200. data/lib/gtk_paradise/gtk_classes/check_button.rb +27 -8
  201. data/lib/gtk_paradise/gtk_classes/combo_box.rb +4 -1
  202. data/lib/gtk_paradise/gtk_classes/combo_box_entry.rb +17 -11
  203. data/lib/gtk_paradise/gtk_classes/combo_box_text.rb +21 -19
  204. data/lib/gtk_paradise/gtk_classes/dialog.rb +2 -2
  205. data/lib/gtk_paradise/gtk_classes/entry.rb +256 -124
  206. data/lib/gtk_paradise/gtk_classes/entry_completion.rb +4 -0
  207. data/lib/gtk_paradise/gtk_classes/event_box.rb +21 -2
  208. data/lib/gtk_paradise/gtk_classes/event_button.rb +1 -1
  209. data/lib/gtk_paradise/gtk_classes/expander.rb +8 -1
  210. data/lib/gtk_paradise/gtk_classes/file_chooser_dialog.rb +1 -1
  211. data/lib/gtk_paradise/gtk_classes/file_filter.rb +4 -2
  212. data/lib/gtk_paradise/gtk_classes/file_selection.rb +4 -3
  213. data/lib/gtk_paradise/gtk_classes/frame.rb +19 -1
  214. data/lib/gtk_paradise/gtk_classes/grid.rb +206 -160
  215. data/lib/gtk_paradise/gtk_classes/hbox.rb +145 -0
  216. data/lib/gtk_paradise/gtk_classes/header_bar.rb +19 -8
  217. data/lib/gtk_paradise/gtk_classes/image.rb +1 -1
  218. data/lib/gtk_paradise/gtk_classes/label.rb +174 -135
  219. data/lib/gtk_paradise/gtk_classes/menu.rb +7 -3
  220. data/lib/gtk_paradise/gtk_classes/menu_bar.rb +1 -1
  221. data/lib/gtk_paradise/gtk_classes/menu_item.rb +1 -1
  222. data/lib/gtk_paradise/gtk_classes/notebook.rb +114 -64
  223. data/lib/gtk_paradise/gtk_classes/paned.rb +52 -0
  224. data/lib/gtk_paradise/gtk_classes/radio_menu_item.rb +19 -1
  225. data/lib/gtk_paradise/gtk_classes/scale_button.rb +16 -1
  226. data/lib/gtk_paradise/gtk_classes/scrolled_window.rb +8 -6
  227. data/lib/gtk_paradise/gtk_classes/search_bar.rb +1 -1
  228. data/lib/gtk_paradise/gtk_classes/source_buffer.rb +4 -5
  229. data/lib/gtk_paradise/gtk_classes/spin_button.rb +9 -1
  230. data/lib/gtk_paradise/gtk_classes/spinner.rb +32 -2
  231. data/lib/gtk_paradise/gtk_classes/status_icon.rb +2 -0
  232. data/lib/gtk_paradise/gtk_classes/statusbar.rb +1 -0
  233. data/lib/gtk_paradise/gtk_classes/style_context.rb +71 -0
  234. data/lib/gtk_paradise/gtk_classes/text_buffer.rb +45 -19
  235. data/lib/gtk_paradise/gtk_classes/text_view.rb +20 -3
  236. data/lib/gtk_paradise/gtk_classes/toggle_button.rb +3 -0
  237. data/lib/gtk_paradise/gtk_classes/toolbar.rb +2 -2
  238. data/lib/gtk_paradise/gtk_classes/tree_iter.rb +1 -1
  239. data/lib/gtk_paradise/gtk_classes/tree_view.rb +93 -70
  240. data/lib/gtk_paradise/gtk_classes/tree_view_column.rb +2 -1
  241. data/lib/gtk_paradise/gtk_classes/vbox.rb +71 -10
  242. data/lib/gtk_paradise/gtk_classes/vscale.rb +2 -2
  243. data/lib/gtk_paradise/gtk_classes/widget.rb +1057 -590
  244. data/lib/gtk_paradise/gtk_classes/window.rb +37 -2
  245. data/lib/gtk_paradise/hello_world/README.md +1 -1
  246. data/lib/gtk_paradise/hello_world/hello_world_gtk4.rb +20 -0
  247. data/lib/gtk_paradise/images/icons/close_image.png +0 -0
  248. data/lib/gtk_paradise/images/icons/closed.png +0 -0
  249. data/lib/gtk_paradise/images/icons/directory.png +0 -0
  250. data/lib/gtk_paradise/images/icons/icon_cool.gif +0 -0
  251. data/lib/gtk_paradise/images/icons/icon_lol.gif +0 -0
  252. data/lib/gtk_paradise/images/icons/icon_smile.gif +0 -0
  253. data/lib/gtk_paradise/images/icons/opened.png +0 -0
  254. data/lib/gtk_paradise/images/internal/gtk_label_example.png +0 -0
  255. data/lib/gtk_paradise/images/misc/wiki_logo.png +0 -0
  256. data/lib/gtk_paradise/images/small/GREEN_CIRCLE.png +0 -0
  257. data/lib/gtk_paradise/images/small/README.md +2 -0
  258. data/lib/gtk_paradise/images/small/RED_CIRCLE.png +0 -0
  259. data/lib/gtk_paradise/pango/{pango_fonts.rb → fonts.rb} +2 -2
  260. data/lib/gtk_paradise/pango/{pango.rb → layout.rb} +1 -1
  261. data/lib/gtk_paradise/pango/pango_renderer.rb +9 -2
  262. data/lib/gtk_paradise/project/project.rb +4 -3
  263. data/lib/gtk_paradise/prototypes/README.md +8 -0
  264. data/lib/gtk_paradise/prototypes/gtk3_standalone.rb +8 -21
  265. data/lib/gtk_paradise/prototypes/gtk4_standalone.rb +135 -0
  266. data/lib/gtk_paradise/prototypes/shared_code.rb +5 -15
  267. data/lib/gtk_paradise/prototypes/unified_gtk_prototype.rb +179 -0
  268. data/lib/gtk_paradise/require_gtk4.rb +7 -0
  269. data/lib/gtk_paradise/requires/require_base_module.rb +7 -0
  270. data/lib/gtk_paradise/requires/require_files_irrespective_of_the_gtk_version_at_hand.rb +25 -16
  271. data/lib/gtk_paradise/requires/require_gtk2.rb +6 -4
  272. data/lib/gtk_paradise/requires/{require_gtk2_or_gtk3.rb → require_gtk2_or_gtk3_or_gtk4.rb} +33 -12
  273. data/lib/gtk_paradise/requires/require_gtk3.rb +5 -20
  274. data/lib/gtk_paradise/requires/require_gtk4.rb +13 -0
  275. data/lib/gtk_paradise/requires/require_gtk_runner.rb +1 -0
  276. data/lib/gtk_paradise/requires/require_the_base_module_and_gtk_run.rb +1 -1
  277. data/lib/gtk_paradise/requires/require_the_base_module_the_app_module_and_the_toplevel_methods.rb +9 -0
  278. data/lib/gtk_paradise/requires/require_the_classes_files_for_gtk4.rb +11 -0
  279. data/lib/gtk_paradise/requires/require_the_colours_gem.rb +9 -0
  280. data/lib/gtk_paradise/requires/require_the_default_gtk_version.rb +4 -2
  281. data/lib/gtk_paradise/requires/require_the_toplevel_methods.rb +1 -1
  282. data/lib/gtk_paradise/run.rb +1 -0
  283. data/lib/gtk_paradise/run_this_widget/run_this_widget.rb +7 -3
  284. data/lib/gtk_paradise/threads/threads.rb +15 -10
  285. data/lib/gtk_paradise/toplevel_methods/css.rb +183 -35
  286. data/lib/gtk_paradise/toplevel_methods/cursor.rb +17 -3
  287. data/lib/gtk_paradise/toplevel_methods/determine_which_gtk_version_is_in_use.rb +90 -8
  288. data/lib/gtk_paradise/toplevel_methods/events.rb +6 -0
  289. data/lib/gtk_paradise/toplevel_methods/keys.rb +1 -1
  290. data/lib/gtk_paradise/toplevel_methods/screen_resolution.rb +32 -5
  291. data/lib/gtk_paradise/toplevel_methods/text_buffer_tags.rb +13 -4
  292. data/lib/gtk_paradise/toplevel_methods/tokenizer.rb +18 -3
  293. data/lib/gtk_paradise/toplevel_methods/{misc.rb → toplevel_methods.rb} +728 -181
  294. data/lib/gtk_paradise/utility_scripts/commandline_to_automatic_gui.rb +244 -0
  295. data/lib/gtk_paradise/version/version.rb +2 -2
  296. data/lib/gtk_paradise/widgets/gtk2/cat_merge.rb +2 -6
  297. data/lib/gtk_paradise/widgets/gtk2/cell_renderer_progress_example.rb +0 -5
  298. data/lib/gtk_paradise/widgets/gtk2/foto_lister.rb +2 -6
  299. data/lib/gtk_paradise/widgets/gtk2/gidnight_commander/gidnight_commander.rb +3 -3
  300. data/lib/gtk_paradise/widgets/gtk2/hbox_example.rb +1 -5
  301. data/lib/gtk_paradise/widgets/gtk2/multiple_select_in_a_tree_view_widget.rb +2 -6
  302. data/lib/gtk_paradise/widgets/gtk2/paned_example.rb +1 -1
  303. data/lib/gtk_paradise/widgets/gtk2/slider_changing_button.rb +2 -6
  304. data/lib/gtk_paradise/widgets/gtk2/status_icon_example.rb +2 -6
  305. data/lib/gtk_paradise/widgets/gtk2/table2.rb +2 -6
  306. data/lib/gtk_paradise/widgets/gtk2/toolbar_example.rb +2 -6
  307. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/audio_button}/audio_button.rb +15 -26
  308. data/lib/gtk_paradise/widgets/gtk3/burn_this_iso_file/burn_this_iso_file.rb +2 -6
  309. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/button_open_remote_webpage}/button_open_remote_webpage.rb +105 -50
  310. data/lib/gtk_paradise/widgets/gtk3/button_with_border/button_with_border.rb +155 -0
  311. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/button_xorg_buffer}/button_xorg_buffer.rb +76 -18
  312. data/lib/gtk_paradise/widgets/gtk3/calculator/calculator.rb +183 -76
  313. data/lib/gtk_paradise/widgets/gtk3/checkbox_image/checkbox_image.rb +3 -7
  314. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/coloured_button}/coloured_button.rb +94 -24
  315. data/lib/gtk_paradise/widgets/gtk3/coloured_square/coloured_square.rb +2 -6
  316. data/lib/gtk_paradise/widgets/gtk3/coloured_unit/coloured_unit.rb +151 -0
  317. data/lib/gtk_paradise/widgets/gtk3/cpu_widget/cpu_widget.rb +2 -6
  318. data/lib/gtk_paradise/widgets/gtk3/directory_content_widget/directory_content_widget.rb +937 -7
  319. data/lib/gtk_paradise/widgets/gtk3/editor/connect_skeleton.rb +33 -38
  320. data/lib/gtk_paradise/widgets/gtk3/editor/create.rb +66 -41
  321. data/lib/gtk_paradise/widgets/gtk3/editor/editor.rb +256 -270
  322. data/lib/gtk_paradise/widgets/gtk3/editor/internal_widgets/goto_line_widget.rb +52 -65
  323. data/lib/gtk_paradise/widgets/gtk3/editor/misc.rb +358 -111
  324. data/lib/gtk_paradise/widgets/gtk3/files_in_directory/files_in_directory.rb +2 -7
  325. data/lib/gtk_paradise/widgets/gtk3/flexible_vte/flexible_vte.rb +3 -7
  326. data/lib/gtk_paradise/widgets/gtk3/font_size_widget/action_button.rb +1 -5
  327. data/lib/gtk_paradise/widgets/gtk3/font_size_widget/font_size_widget.rb +2 -6
  328. data/lib/gtk_paradise/widgets/{gtk2 → gtk3}/gidnight_commander/gidnight_commander.config +1 -2
  329. data/lib/gtk_paradise/widgets/gtk3/gidnight_commander/gidnight_commander.rb +165 -125
  330. data/lib/gtk_paradise/widgets/gtk3/image_close_on_click_action/image_close_on_click_action.rb +34 -2
  331. data/lib/gtk_paradise/widgets/gtk3/image_viewer/image_viewer.rb +23 -26
  332. data/lib/gtk_paradise/widgets/gtk3/information_about_the_harddisc/harddisc_information.rb +161 -0
  333. data/lib/gtk_paradise/widgets/gtk3/insert_character/insert_character.rb +24 -29
  334. data/lib/gtk_paradise/widgets/gtk3/linux_users/linux_users.rb +32 -32
  335. data/lib/gtk_paradise/widgets/gtk3/my_calendar/my_calendar.rb +330 -7
  336. data/lib/gtk_paradise/widgets/gtk3/my_image_menu_item/my_image_menu_item.rb +179 -0
  337. data/lib/gtk_paradise/widgets/gtk3/non_numbers_only/non_numbers_only.rb +136 -0
  338. data/lib/gtk_paradise/widgets/gtk3/note_window/note_window.rb +199 -0
  339. data/lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb +311 -7
  340. data/lib/gtk_paradise/widgets/gtk3/notebook_tab_with_icon/notebook_tab_with_icon.rb +402 -7
  341. data/lib/gtk_paradise/widgets/gtk3/numbered_lines/numbered_lines.rb +128 -82
  342. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/numbers_only}/numbers_only.rb +15 -3
  343. data/lib/gtk_paradise/widgets/gtk3/ping_widget/ping_widget.rb +491 -8
  344. data/lib/gtk_paradise/widgets/gtk3/regex_matcher/regex_matcher.rb +362 -43
  345. data/lib/gtk_paradise/widgets/gtk3/rename_widget/rename_widget.rb +8 -25
  346. data/lib/gtk_paradise/widgets/gtk3/show_which_key_was_pressed/show_which_key_was_pressed.rb +190 -0
  347. data/lib/gtk_paradise/widgets/gtk3/stopwatch/stopwatch.rb +318 -7
  348. data/lib/gtk_paradise/widgets/gtk3/sys_message/sys_message.rb +219 -7
  349. data/lib/gtk_paradise/widgets/gtk3/system_information/system_information.rb +58 -34
  350. data/lib/gtk_paradise/widgets/gtk3/tabble/admin_panel.rb +2 -6
  351. data/lib/gtk_paradise/widgets/gtk3/tabble/image_and_button.rb +2 -6
  352. data/lib/gtk_paradise/widgets/gtk3/tabble/tabble.rb +2 -6
  353. data/lib/gtk_paradise/widgets/gtk3/view_webpage/view_webpage.rb +2 -6
  354. data/lib/gtk_paradise/widgets/gtk3/wiki/README.md +4 -0
  355. data/lib/gtk_paradise/widgets/gtk3/wiki/wiki.rb +388 -0
  356. data/lib/gtk_paradise/widgets/gtk4/ping_widget/ping_widget.rb +4 -0
  357. data/lib/gtk_paradise/widgets/gtk4/show_icon_theme/show_icon_theme.rb +134 -0
  358. data/lib/gtk_paradise/widgets/gtk4/sys_message/sys_message.rb +269 -0
  359. data/lib/gtk_paradise/widgets/{gtk2/stopwatch/stopwatch.rb → gtk4/xpm_loader/xpm_loader.rb} +13 -11
  360. data/lib/gtk_paradise/widgets/shared_code/browser/browser_module.rb +4 -16
  361. data/lib/gtk_paradise/widgets/shared_code/cdripper/cdripper_module.rb +1 -1
  362. data/lib/gtk_paradise/widgets/shared_code/colour_filled_widget/colour_filled_widget_module.rb +25 -28
  363. data/lib/gtk_paradise/widgets/shared_code/colour_palette/colour_palette_module.rb +2 -2
  364. data/lib/gtk_paradise/widgets/shared_code/contacts/contacts_module.rb +62 -64
  365. data/lib/gtk_paradise/widgets/shared_code/flip_state_widget/flip_state_widget_module.rb +3 -19
  366. data/lib/gtk_paradise/widgets/shared_code/information_about_the_harddisc/harddisc_information.rb +0 -155
  367. data/lib/gtk_paradise/widgets/shared_code/information_about_the_harddisc/information_about_the_harddisc_module.rb +0 -444
  368. data/lib/gtk_paradise/widgets/shared_code/lsmod/lsmod_module.rb +22 -26
  369. data/lib/gtk_paradise/widgets/shared_code/lspci/lspci_module.rb +24 -36
  370. data/lib/gtk_paradise/widgets/shared_code/mini_clock/mini_clock_module.rb +74 -58
  371. data/lib/gtk_paradise/widgets/shared_code/my_calendar/my_calendar_module.rb +0 -327
  372. data/lib/gtk_paradise/widgets/shared_code/pid_displayer/pid_displayer_module.rb +53 -41
  373. data/lib/gtk_paradise/widgets/shared_code/random_image/random_image_module.rb +46 -29
  374. data/lib/gtk_paradise/widgets/shared_code/select_file/select_file_module.rb +1 -1
  375. data/lib/gtk_paradise/widgets/shared_code/show_icon_theme/show_icon_theme_module.rb +56 -44
  376. data/lib/gtk_paradise/widgets/shared_code/simple_clock/simple_clock_module.rb +1 -12
  377. data/lib/gtk_paradise/widgets/shared_code/stopwatch/stopwatch_module.rb +0 -341
  378. data/lib/gtk_paradise/widgets/shared_code/sys_message/sys_message_module.rb +0 -211
  379. data/lib/gtk_paradise/widgets/shared_code/tabby/tabby_module.rb +3 -15
  380. data/lib/gtk_paradise/widgets/shared_code/xpm_loader/xpm_loader_module.rb +15 -23
  381. data/lib/gtk_paradise/www/index.cgi +2 -2
  382. data/lib/gtk_paradise/yaml/browser_URLs.yml +3 -4
  383. data/lib/gtk_paradise/yaml/configuration_options_for_class_gtk_runner.yml +6 -6
  384. data/lib/gtk_paradise/yaml/experimental/README.md +3 -0
  385. data/lib/gtk_paradise/yaml/experimental/all_widgets.yml +37 -0
  386. data/lib/gtk_paradise/yaml/menu.yml +6 -3
  387. data/lib/gtk_paradise/yaml/notebook_controller.yml +62 -29
  388. data/lib/gtk_paradise.rb +0 -5
  389. data/test/gtk2/testing_combo_box.rb +1 -0
  390. data/test/gtk2/testing_display.rb +23 -0
  391. data/test/gtk2/testing_gtk_image.rb +4 -3
  392. data/test/gtk2/testing_hbox_and_vbox.rb +37 -0
  393. data/test/gtk2/testing_label_with_ampersand.rb +5 -2
  394. data/test/gtk2/testing_notebook.rb +11 -5
  395. data/test/gtk3/test_widget.rb +2 -1
  396. data/test/gtk3/testing_app.rb +0 -1
  397. data/test/gtk3/testing_base_module.rb +2 -1
  398. data/test/gtk3/testing_numbered_lines.rb +20 -0
  399. data/test/gtk3/testing_project_base_directory.rb +6 -1
  400. data/test/gtk3/testing_the_html_pseudo_tags.rb +2 -2
  401. data/test/gtk4/testing_gtk_entry.rb +24 -0
  402. data/test/misc/testing_a_gtk_frame.rb +14 -0
  403. data/test/misc/testing_gtk4_simplifications.rb +105 -0
  404. data/test/misc/testing_gtk_paradise_runner.rb +19 -4
  405. data/test/misc/testing_the_gtk_classes.rb +83 -0
  406. metadata +246 -199
  407. data/lib/gtk_paradise/base_module/change_directory.rb +0 -22
  408. data/lib/gtk_paradise/base_module/combo_box_and_combo_box_entry.rb +0 -113
  409. data/lib/gtk_paradise/base_module/commandline_arguments.rb +0 -36
  410. data/lib/gtk_paradise/base_module/configuration.rb +0 -50
  411. data/lib/gtk_paradise/base_module/constants.rb +0 -23
  412. data/lib/gtk_paradise/base_module/debug.rb +0 -127
  413. data/lib/gtk_paradise/base_module/draggable.rb +0 -95
  414. data/lib/gtk_paradise/base_module/emoji.rb +0 -107
  415. data/lib/gtk_paradise/base_module/esystem.rb +0 -22
  416. data/lib/gtk_paradise/base_module/events.rb +0 -111
  417. data/lib/gtk_paradise/base_module/fonts.rb +0 -119
  418. data/lib/gtk_paradise/base_module/graphics_display.rb +0 -47
  419. data/lib/gtk_paradise/base_module/gtk3.rb +0 -43
  420. data/lib/gtk_paradise/base_module/gtk_buttons.rb +0 -562
  421. data/lib/gtk_paradise/base_module/gtk_entry.rb +0 -126
  422. data/lib/gtk_paradise/base_module/gtk_fixed.rb +0 -18
  423. data/lib/gtk_paradise/base_module/gtk_grid.rb +0 -61
  424. data/lib/gtk_paradise/base_module/gtk_image.rb +0 -501
  425. data/lib/gtk_paradise/base_module/gtk_label.rb +0 -211
  426. data/lib/gtk_paradise/base_module/gtk_notebook.rb +0 -88
  427. data/lib/gtk_paradise/base_module/gtk_scrolled_window.rb +0 -155
  428. data/lib/gtk_paradise/base_module/misc.rb +0 -2949
  429. data/lib/gtk_paradise/base_module/pango.rb +0 -24
  430. data/lib/gtk_paradise/base_module/popover.rb +0 -241
  431. data/lib/gtk_paradise/base_module/register_sigint.rb +0 -20
  432. data/lib/gtk_paradise/base_module/reset.rb +0 -128
  433. data/lib/gtk_paradise/base_module/return_corresponding_gtk_stock_item.rb +0 -92
  434. data/lib/gtk_paradise/base_module/roebe.rb +0 -19
  435. data/lib/gtk_paradise/base_module/table.rb +0 -438
  436. data/lib/gtk_paradise/base_module/time.rb +0 -35
  437. data/lib/gtk_paradise/constants/available_cursors.rb +0 -52
  438. data/lib/gtk_paradise/constants/fonts.rb +0 -38
  439. data/lib/gtk_paradise/constants/misc.rb +0 -56
  440. data/lib/gtk_paradise/constants/newline.rb +0 -14
  441. data/lib/gtk_paradise/constants/xbm_icons.rb +0 -121
  442. data/lib/gtk_paradise/examples/gtk3/003_sorted_tree.rb +0 -141
  443. data/lib/gtk_paradise/examples/gtk3/034_combo_box_example.rb +0 -49
  444. data/lib/gtk_paradise/examples/gtk3/068_text_view_example.rb +0 -34
  445. data/lib/gtk_paradise/examples/gtk3/071_search_bar_example.rb +0 -59
  446. data/lib/gtk_paradise/gtk_classes/colours/colours.rb +0 -158
  447. data/lib/gtk_paradise/requires/require_the_minesweeper_files.rb +0 -11
  448. data/lib/gtk_paradise/toplevel_methods/allow_only_numbers.rb +0 -59
  449. data/lib/gtk_paradise/toplevel_methods/csv.rb +0 -102
  450. data/lib/gtk_paradise/toplevel_methods/e.rb +0 -18
  451. data/lib/gtk_paradise/toplevel_methods/enable_and_disable_warnings.rb +0 -58
  452. data/lib/gtk_paradise/toplevel_methods/keyboard.rb +0 -25
  453. data/lib/gtk_paradise/toplevel_methods/main_file.rb +0 -31
  454. data/lib/gtk_paradise/toplevel_methods/register_sigint.rb +0 -17
  455. data/lib/gtk_paradise/toplevel_methods/roebe.rb +0 -22
  456. data/lib/gtk_paradise/toplevel_methods/select_file.rb +0 -168
  457. data/lib/gtk_paradise/toplevel_methods/spacer.rb +0 -55
  458. data/lib/gtk_paradise/toplevel_methods/tooltips.rb +0 -71
  459. data/lib/gtk_paradise/toplevel_methods/we_use_this_gtk_version.rb +0 -65
  460. data/lib/gtk_paradise/widgets/gtk2/directory_content_widget/directory_content_widget.rb +0 -30
  461. data/lib/gtk_paradise/widgets/gtk2/my_calendar/my_calendar.config +0 -6
  462. data/lib/gtk_paradise/widgets/gtk2/my_calendar/my_calendar.rb +0 -34
  463. data/lib/gtk_paradise/widgets/gtk2/notebook_tab_with_icon/notebook_tab_with_icon.rb +0 -30
  464. data/lib/gtk_paradise/widgets/gtk2/ping_widget/ping_widget.rb +0 -30
  465. data/lib/gtk_paradise/widgets/gtk2/sys_message/sys_message.config +0 -6
  466. data/lib/gtk_paradise/widgets/gtk2/sys_message/sys_message.rb +0 -29
  467. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/constants.rb +0 -53
  468. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/directory_content_widget_module.rb +0 -777
  469. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/handle_this_file_or_symlink.rb +0 -83
  470. data/lib/gtk_paradise/widgets/shared_code/notebook_controller/notebook_controller_module.rb +0 -339
  471. data/lib/gtk_paradise/widgets/shared_code/notebook_tab_with_icon/notebook_tab_with_icon_module.rb +0 -297
  472. data/lib/gtk_paradise/widgets/shared_code/ping_widget/ping_widget_module.rb +0 -326
  473. data/lib/gtk_paradise/widgets/version_agnostic/button_with_border.rb +0 -63
  474. data/lib/gtk_paradise/widgets/version_agnostic/coloured_unit.rb +0 -54
  475. data/lib/gtk_paradise/widgets/version_agnostic/my_image_menu_item.rb +0 -103
  476. data/lib/gtk_paradise/widgets/version_agnostic/my_menu_item_separator.rb +0 -31
  477. data/lib/gtk_paradise/widgets/version_agnostic/non_numbers_only.rb +0 -66
  478. data/lib/gtk_paradise/widgets/version_agnostic/note_window.rb +0 -107
  479. /data/lib/gtk_paradise/examples/gtk3/{084_undecorated_window_example.rb → 014_undecorated_window_example.rb} +0 -0
  480. /data/lib/gtk_paradise/examples/gtk3/{077_status_icon_example.rb → 019_status_icon_example.rb} +0 -0
  481. /data/lib/gtk_paradise/examples/gtk3/{076_stack_example.rb → 020_stack_example.rb} +0 -0
  482. /data/lib/gtk_paradise/examples/gtk3/{006_password_example.rb → 025_password_example.rb} +0 -0
  483. /data/lib/gtk_paradise/examples/gtk3/{015_list_box_example.rb → 033_list_box_example.rb} +0 -0
  484. /data/lib/gtk_paradise/examples/gtk3/{020_radio_button_window.rb → 038_radio_button_window.rb} +0 -0
  485. /data/lib/gtk_paradise/examples/gtk3/{021_scale_button_demo.rb → 039_scale_button_demo.rb} +0 -0
  486. /data/lib/gtk_paradise/examples/gtk3/{024_installation_assistant.rb → 042_installation_assistant.rb} +0 -0
  487. /data/lib/gtk_paradise/examples/gtk3/{035_notebook_css_example.rb → 052_notebook_css_example.rb} +0 -0
  488. /data/lib/gtk_paradise/examples/gtk3/{040_font_chooser_dialog_example.rb → 056_font_chooser_dialog_example.rb} +0 -0
  489. /data/lib/gtk_paradise/examples/gtk3/{041_flowbox.rb → 057_flowbox.rb} +0 -0
  490. /data/lib/gtk_paradise/examples/gtk3/{045_fixed_example.rb → 061_fixed_example.rb} +0 -0
  491. /data/lib/gtk_paradise/examples/gtk3/{054_svg_viewer.rb → 070_svg_viewer.rb} +0 -0
  492. /data/lib/gtk_paradise/examples/gtk3/{065_tooltips_example.rb → 079_tooltips_example.rb} +0 -0
@@ -8,19 +8,770 @@
8
8
  # =========================================================================== #
9
9
  module Gtk
10
10
 
11
- class Widget
11
+ class Widget # === Gtk::Widget
12
+
13
+ # ========================================================================= #
14
+ # First, call in gdk-specific modifications.
15
+ # ========================================================================= #
16
+ require 'gtk_paradise/gdk/event_crossing.rb'
12
17
 
13
- require 'gtk_paradise/gtk_classes/colours/colours.rb'
14
18
  require 'gtk_paradise/toplevel_methods/determine_which_gtk_version_is_in_use.rb'
15
- require 'gtk_paradise/toplevel_methods/spacer.rb'
16
19
 
17
20
  # ========================================================================= #
18
- # === shadow_type_etched_in
21
+ # === add_or_append
22
+ # ========================================================================= #
23
+ def add_or_append(i)
24
+ if Gtk.do_we_use_gtk3?
25
+ add(i)
26
+ elsif Gtk.do_we_use_gtk4?
27
+ append(i)
28
+ end
29
+ end
30
+
31
+ if Gtk.do_we_use_gtk4?
32
+ # ======================================================================= #
33
+ # === set_border_width
34
+ # ======================================================================= #
35
+ def set_border_width(i = 5)
36
+ css_class("pad#{i}px")
37
+ end
38
+ end
39
+
40
+ # ========================================================================= #
41
+ # === remove_css_class
42
+ #
43
+ # This method can be used to remove a particular CSS class from a
44
+ # widget.
45
+ # ========================================================================= #
46
+ def remove_css_class(this_css_class)
47
+ context = style_context
48
+ context.remove_class(this_css_class)
49
+ end; alias remove_this_css_class remove_css_class # === remove_this_css_class
50
+
51
+ # ========================================================================= #
52
+ # === very_light_yellowish_background
53
+ #
54
+ # This is similar to yellow_background() defined above, but the difference
55
+ # will be that the yellow colour here will be very faint - even fainter
56
+ # than on the method defined above.
57
+ #
58
+ # This depends on CSS, so it will not work on ruby-gtk2.
59
+ # ========================================================================= #
60
+ def very_light_yellowish_background
61
+ css_class('BG_very_light_yellowish')
62
+ end; alias yellowish_background2 very_light_yellowish_background # === yellowish_background2
63
+ alias background_yellow2 very_light_yellowish_background # === background_yellow2
64
+ alias very_light_yellow_background very_light_yellowish_background # === very_light_yellow_background
65
+ alias very_light_yellow_background_colour very_light_yellowish_background # === very_light_yellow_background_colour
66
+ alias BG_yellow very_light_yellowish_background # === very_light_yellow_background_colour
67
+ alias yello very_light_yellowish_background # === yello
68
+
69
+ # ========================================================================= #
70
+ # === on_hover_steelblue
71
+ # ========================================================================= #
72
+ def on_hover_steelblue
73
+ on_hover(__method__)
74
+ end
75
+
76
+ # ========================================================================= #
77
+ # === limegreen
78
+ # ========================================================================= #
79
+ def limegreen
80
+ on_hover(__method__)
81
+ end; alias mediumaquamarine limegreen # === mediumaquamarine
82
+ alias khaki limegreen # === khaki
83
+
84
+ # ========================================================================= #
85
+ # === yellow_background
86
+ #
87
+ # This method can be used to designate a light yellow background
88
+ # colour tone. It depends on support for CSS being available -
89
+ # thus, ruby-gtk2 does not work with this method.
90
+ # ========================================================================= #
91
+ def yellow_background
92
+ css_class('BG_light_yellow')
93
+ end; alias light_yellow_background yellow_background # === light_yellow_background
94
+ alias light_yellowish_background yellow_background # === light_yellowish_background
95
+ alias yellowish_background yellow_background # === yellowish_background
96
+
97
+ # ========================================================================= #
98
+ # === lightgreen
99
+ # ========================================================================= #
100
+ def lightgreen
101
+ on_hover(__method__)
102
+ end
103
+
104
+ # ========================================================================= #
105
+ # === paleturquoise
106
+ # ========================================================================= #
107
+ def paleturquoise
108
+ on_hover(__method__)
109
+ end
110
+
111
+ # ========================================================================= #
112
+ # === lightblue
113
+ # ========================================================================= #
114
+ def lightblue
115
+ on_hover(__method__)
116
+ end
117
+
118
+ # ========================================================================= #
119
+ # === skyblue
120
+ # ========================================================================= #
121
+ def skyblue
122
+ on_hover(__method__)
123
+ end
124
+
125
+ # ========================================================================= #
126
+ # === lightpink
127
+ # ========================================================================= #
128
+ def lightpink
129
+ on_hover(__method__)
130
+ end
131
+
132
+ # ========================================================================= #
133
+ # === darkmagenta
134
+ # ========================================================================= #
135
+ def darkmagenta
136
+ on_hover(__method__)
137
+ end
138
+
139
+ # ========================================================================= #
140
+ # === tomato
141
+ # ========================================================================= #
142
+ def tomato
143
+ add_css_class(__method__.to_s)
144
+ end
145
+
146
+ # ========================================================================= #
147
+ # === darkblue
148
+ # ========================================================================= #
149
+ def darkblue
150
+ add_css_class(__method__.to_s)
151
+ end
152
+
153
+ # ========================================================================= #
154
+ # === darkgreen
155
+ # ========================================================================= #
156
+ def darkgreen
157
+ add_css_class(__method__.to_s)
158
+ end
159
+
160
+ # ========================================================================= #
161
+ # === khaki_background
162
+ # ========================================================================= #
163
+ def khaki_background
164
+ css_class('BG_khaki')
165
+ end
166
+
167
+ # ========================================================================= #
168
+ # === light_green_background
169
+ # ========================================================================= #
170
+ def light_green_background
171
+ css_class('BG_light_green')
172
+ end; alias lightgreen_background light_green_background # === lightgreen_background
173
+
174
+ # ========================================================================= #
175
+ # === azure_background
176
+ # ========================================================================= #
177
+ def azure_background
178
+ css_class('BG_azure')
179
+ end; alias bg_azure azure_background # === bg_azure
180
+
181
+ # ========================================================================= #
182
+ # === steelblue
183
+ # ========================================================================= #
184
+ def steelblue
185
+ css_class(__method__.to_s)
186
+ end
187
+
188
+ # ========================================================================= #
189
+ # === royalblue
190
+ # ========================================================================= #
191
+ def royalblue
192
+ css_class(__method__.to_s)
193
+ end
194
+
195
+ # ========================================================================= #
196
+ # === slateblue
197
+ # ========================================================================= #
198
+ def slateblue
199
+ css_class(__method__.to_s)
200
+ end
201
+
202
+ # ========================================================================= #
203
+ # === lightskyblue_background
204
+ # ========================================================================= #
205
+ def lightskyblue_background
206
+ css_class('BG_lightskyblue')
207
+ end; alias bg_lightblue lightskyblue_background # === bg_lightblue
208
+ alias lightblue_background lightskyblue_background # === lightblue_background
209
+ alias light_blue_background lightskyblue_background # === light_blue_background
210
+
211
+ # ========================================================================= #
212
+ # === light_pink_background
213
+ # ========================================================================= #
214
+ def light_pink_background
215
+ css_class('BG_lightpink')
216
+ end; alias lightpink_background light_pink_background # === lightpink_background
217
+
218
+ # ========================================================================= #
219
+ # === modify_to_this_font
220
+ #
221
+ # This will modify the font for that particular widget at hand.
222
+ #
223
+ # Usage example:
224
+ #
225
+ # modify_this_font(:liberation)
226
+ #
227
+ # ========================================================================= #
228
+ def modify_to_this_font(
229
+ this_font = 'Sans 20'
230
+ )
231
+ this_font = ::Gtk.expand_this_font(this_font)
232
+ _ = Pango::FontDescription.new(this_font)
233
+ if Gtk.are_we_using_gtk2?
234
+ modify_font(_)
235
+ else
236
+ override_font(_)
237
+ end
238
+ end; alias modify_this_font modify_to_this_font # === modify_this_font
239
+ alias font_to_use= modify_to_this_font # === font_to_use=
240
+
241
+ # ========================================================================= #
242
+ # === bsteelblue1
243
+ # ========================================================================= #
244
+ def bsteelblue1
245
+ css_class(__method__.to_s)
246
+ end
247
+
248
+ # ========================================================================= #
249
+ # === make_bold_font
250
+ #
251
+ # This makes use of CSS rules, so it will not work for ruby-gtk2 by
252
+ # default.
253
+ # ========================================================================= #
254
+ def make_bold_font
255
+ css_class 'bold_font'
256
+ end
257
+
258
+ # ========================================================================= #
259
+ # === bnavy1
260
+ #
261
+ # This will also have various aliases.
262
+ # ========================================================================= #
263
+ def bnavy1
264
+ css_class(__method__.to_s)
265
+ end
266
+
267
+ # ========================================================================= #
268
+ # === bindigo1
269
+ # ========================================================================= #
270
+ def bindigo1
271
+ css_class(__method__.to_s)
272
+ end
273
+
274
+ # ========================================================================= #
275
+ # === bdarkorchid1
276
+ # ========================================================================= #
277
+ def bdarkorchid1
278
+ css_class(__method__.to_s)
279
+ end
280
+
281
+ # ========================================================================= #
282
+ # === blightgreen1
283
+ # ========================================================================= #
284
+ def blightgreen1
285
+ css_class(__method__.to_s)
286
+ end
287
+
288
+ # ========================================================================= #
289
+ # === bblack1px
290
+ # ========================================================================= #
291
+ def bblack1px
292
+ css_class('bblack1')
293
+ end; alias bblack1 bblack1px # === bblack1
294
+
295
+ # ========================================================================= #
296
+ # === bblack2px
297
+ # ========================================================================= #
298
+ def bblack2px
299
+ css_class('bblack2')
300
+ end; alias bblack2 bblack2px # === bblack2
301
+
302
+ # ========================================================================= #
303
+ # === bblack3px
304
+ # ========================================================================= #
305
+ def bblack3px
306
+ css_class('bblack3')
307
+ end; alias bblack3 bblack3px # === bblack3
308
+
309
+ # ========================================================================= #
310
+ # === bblack4px
311
+ # ========================================================================= #
312
+ def bblack4px
313
+ css_class('bblack4')
314
+ end; alias bblack4 bblack4px # === bblack4
315
+
316
+ # ========================================================================= #
317
+ # === bblack5px
318
+ # ========================================================================= #
319
+ def bblack5px
320
+ css_class('bblack5')
321
+ end; alias bblack5 bblack5px # === bblack5
322
+
323
+ # ========================================================================= #
324
+ # === align_to_center
325
+ #
326
+ # This method will align towards the center. Note that not all widgets
327
+ # respond to this naturally; it is best to use this for gtk-entry
328
+ # widgets and perhaps gtk-label and similar widgets.
329
+ # ========================================================================= #
330
+ def align_to_center
331
+ self.xalign = 0.5
332
+ end; alias align_to_the_center align_to_center # === align_to_the_center
333
+ alias center align_to_center # === center
334
+ alias do_center align_to_center # === do_center
335
+ alias to_center align_to_center # === to_center
336
+ alias to_the_middle align_to_center # === to_the_middle
337
+ alias align_into_the_middle align_to_center # === align_into_the_middle
338
+ alias center_align align_to_center # === center_align
339
+
340
+ # ========================================================================= #
341
+ # === hcenter
342
+ #
343
+ # The name "hcenter" is an abbreviation for "horizontal center" position.
344
+ #
345
+ # This variant has been confirmed to work for the gtk-hbox widget, in
346
+ # July 2022.
347
+ # ========================================================================= #
348
+ def hcenter(
349
+ i = :center
350
+ )
351
+ case i
352
+ # ======================================================================= #
353
+ # === :center
354
+ # ======================================================================= #
355
+ when :center
356
+ i = ::Gtk::Align::CENTER
357
+ end
358
+ set_halign(i) # Or Gtk::Align::CENTER
359
+ end; alias horizontal_center hcenter # === horizontal_center
360
+ alias halign_center hcenter # === halign_center
361
+ alias hjustify hcenter # === hjustify
362
+ alias center_this_widget hcenter # === center_this_widget
363
+ alias clever_center hcenter # === clever_center
364
+ alias center_into_the_middle hcenter # === center_into_the_middle
365
+ alias centered_container hcenter # === centered_container
366
+
367
+ require 'gtk_paradise/fonts/fonts.rb'
368
+ # ========================================================================= #
369
+ # === use_this_font=
370
+ # ========================================================================= #
371
+ def use_this_font=(
372
+ i = 'EmojiOne Color 22'
373
+ )
374
+ if i.is_a?(String) or i.is_a?(Symbol)
375
+ i = ::Gtk.expand_this_font(i)
376
+ i = Pango::FontDescription.new(i.to_s)
377
+ end
378
+ if ::Gtk.use_gtk2?
379
+ modify_font(i)
380
+ elsif ::Gtk.use_gtk3?
381
+ override_font(i)
382
+ elsif ::Gtk.use_gtk4?
383
+ puts 'override_font() has not yet been ported to ruby-gtk4 '\
384
+ 'and the gtk_paradise gem.'
385
+ end
386
+ end; alias use_this_font use_this_font= # === use_this_font
387
+ alias set_use_this_font use_this_font= # === set_use_this_font
388
+ alias try_to_use_this_font use_this_font= # === try_to_use_this_font
389
+ alias fonty use_this_font= # === fonty
390
+ alias font= use_this_font= # === font=
391
+
392
+ # ========================================================================= #
393
+ # === do_focus
394
+ #
395
+ # This variant is a slightly nicer-looking variant compared to the
396
+ # .set_focus(true) variant.
397
+ # ========================================================================= #
398
+ def do_focus
399
+ set_focus(true)
400
+ end; alias do_focus_on_it do_focus # === do_focus_on_it
401
+ alias do_select do_focus # === do_select
402
+
403
+ # ========================================================================= #
404
+ # === deselect
405
+ #
406
+ # Note that this method will NOT work on every gtk-widget; the primary
407
+ # use case has been for gtk-entry, but I figured that other gtk-widgets
408
+ # may benefit from this method as well, so it was added onto class
409
+ # Gtk::Widget.
410
+ # ========================================================================= #
411
+ def deselect
412
+ select_region(0, 0)
413
+ end; alias deselect_everything deselect # === deselect_everything
414
+ alias defocus deselect # === defocus
415
+
416
+ # ========================================================================= #
417
+ # === remove_widgets
418
+ #
419
+ # This method will remove all child-widgets from a container.
420
+ # ========================================================================= #
421
+ def remove_widgets
422
+ children.each {|this_child_widget|
423
+ remove(this_child_widget)
424
+ }
425
+ end
426
+
427
+ # ========================================================================= #
428
+ # === set_background_colour
429
+ #
430
+ # This method can be used to designate a specific background colour
431
+ # for a Gtk::Button.
432
+ # ========================================================================= #
433
+ def set_background_colour(
434
+ i = :whitesmoke
435
+ )
436
+ if ::Gtk.use_gtk2?
437
+ modify_bg(
438
+ ::Gtk::STATE_NORMAL,
439
+ Gdk::Color.parse(i.to_s)
440
+ )
441
+ else
442
+ if i.is_a?(String) and i.start_with?('#') # Assume a hex-code in this event.
443
+ unless Object.const_defined?(:Colours)
444
+ begin
445
+ require 'colours'
446
+ rescue LoadError; end
447
+ end
448
+ i = ::Colours.convert_hex_code_to_RGBA_array(i)
449
+ i = Gdk::RGBA.new(*i)
450
+ elsif i.is_a? Gdk::Color
451
+ # =================================================================== #
452
+ # Convert it into RGB values next.
453
+ # =================================================================== #
454
+ array = [
455
+ (i.red * 100.0 / 65535) / 100,
456
+ (i.green * 100.0 / 65535) / 100,
457
+ (i.blue * 100.0 / 65535) / 100,
458
+ 1.0
459
+ ]
460
+ i = Gdk::RGBA.new(*array)
461
+ end
462
+ override_background_color(:normal, i)
463
+ end
464
+ @background_colour = i
465
+ end; alias set_background_color set_background_colour # === set_background_color
466
+ alias bg_colour set_background_colour # === bg_colour
467
+ alias bg_colour= set_background_colour # === bg_colour=
468
+ alias bg_color set_background_colour # === bg_colour
469
+ alias background set_background_colour # === background
470
+ alias background= set_background_colour # === background=
471
+ alias background_color set_background_colour # === background_color
472
+ alias background_colour set_background_colour # === background_colour
473
+ alias background_colour= set_background_colour # === background_colour=
474
+ alias background_color= set_background_colour # === background_color=
475
+ alias set_background set_background_colour # === set_background
476
+ alias change_background_to set_background_colour # === change_background_to
477
+ alias change_background_colour_to set_background_colour # === change_background_colour_to
478
+ alias change_background_color_to set_background_colour # === change_background_color_to
479
+
480
+ # ========================================================================= #
481
+ # === on_hover
482
+ #
483
+ # This method can be used to modify the colour of a given widget, on
484
+ # a "on-hover" event.
485
+ #
486
+ # Usage example:
487
+ #
488
+ # on_hover(:lightblue)
489
+ #
19
490
  # ========================================================================= #
20
- def shadow_type_etched_in
21
- set_shadow_type(::Gtk::SHADOW_ETCHED_IN)
491
+ def on_hover(
492
+ this_colour = :lightgreen, &block
493
+ )
494
+ modify_background(
495
+ :on_hover, this_colour, &block
496
+ )
497
+ end; alias on_hover_colour on_hover # === on_hover_colour
498
+
499
+ # ========================================================================= #
500
+ # === clear_background
501
+ #
502
+ # This method will clear the border.
503
+ # ========================================================================= #
504
+ def clear_background
505
+ css_class('clear_background')
506
+ end; alias clear_border clear_background # === clear_border
507
+ alias remove_background clear_background # === remove_background
508
+
509
+ # ========================================================================= #
510
+ # === modify_background
511
+ #
512
+ # This method will set the background colour for a widget in a
513
+ # particular state. All other style values are left untouched.
514
+ # See also Gtk::Widget#modify_style.
515
+ #
516
+ # The arguments are:
517
+ #
518
+ # state: the state(GtkStateType) for which to set the
519
+ # background color.
520
+ #
521
+ # colour: the Gdk::Color to assign (does not need to
522
+ # be allocated).
523
+ #
524
+ # ========================================================================= #
525
+ def modify_background(
526
+ state,
527
+ colour = nil,
528
+ &block
529
+ )
530
+ # ======================================================================= #
531
+ # === Handle Hashes first, for the variable state
532
+ # ======================================================================= #
533
+ if colour.is_a? Hash
534
+ if colour.has_key? :colour
535
+ colour = colour.delete(:colour)
536
+ end
537
+ end
538
+ case state
539
+ # ======================================================================= #
540
+ # === :normal
541
+ #
542
+ # This entry point is the default entry point.
543
+ # ======================================================================= #
544
+ when :normal,
545
+ :default
546
+ if Gtk.do_we_use_gtk2?
547
+ state = ::Gtk::STATE_NORMAL
548
+ else
549
+ state = :normal
550
+ end
551
+ # ======================================================================= #
552
+ # === :active
553
+ # ======================================================================= #
554
+ when :active
555
+ if Gtk.do_we_use_gtk2?
556
+ state = ::Gtk::STATE_ACTIVE
557
+ else
558
+ state = :active
559
+ end
560
+ # ======================================================================= #
561
+ # === :prelight
562
+ # ======================================================================= #
563
+ when :prelight,
564
+ :hover,
565
+ :on_hover
566
+ if Gtk.do_we_use_gtk2?
567
+ state = ::Gtk::STATE_PRELIGHT
568
+ else
569
+ state = :prelight
570
+ end
571
+ end
572
+ # ======================================================================= #
573
+ # === Handle blocks next
574
+ # ======================================================================= #
575
+ if block_given?
576
+ yielded = yield
577
+ if yielded.is_a?(Symbol)
578
+ colour = yielded
579
+ end
580
+ end
581
+ if colour.is_a? Symbol
582
+ # ===================================================================== #
583
+ # Convert it into a Gtk::Colours representation. We could check if it
584
+ # is a valid html-colour, but for the time being we do not do this.
585
+ # ===================================================================== #
586
+ if Gtk.do_we_use_gtk2?
587
+ colour = ::Gtk.colour_parse(colour)
588
+ # =================================================================== #
589
+ # gtk3 now uses RGBA rather than Gdk.parse().
590
+ # RGBA stands for red, green, blue and alpha.
591
+ # The values go from 0.0 to 1.0. However had, it seems as if
592
+ # ruby-gtk3 also supports HTML colours directly, so no need
593
+ # to convert them.
594
+ # =================================================================== #
595
+ end
596
+ end
597
+ if Gtk.do_we_use_gtk2?
598
+ modify_bg(state, colour) # Delegate to the original method here.
599
+ # ======================================================================= #
600
+ # === Handle ruby-gtk4 next
601
+ # ======================================================================= #
602
+ elsif Gtk.do_we_use_gtk4?
603
+ css_class("hover_effect_#{colour}")
604
+ else # else assume ruby-gtk3 here.
605
+ override_background_color(state, colour)
606
+ end
607
+ end
608
+
609
+ # ========================================================================= #
610
+ # === scroll_up?
611
+ #
612
+ # This method returns true if the scroll-event (of the middle mouse
613
+ # button) is going upwards.
614
+ # ========================================================================= #
615
+ def scroll_up?(event)
616
+ (event.event_type.name == 'GDK_SCROLL') and
617
+ (event.direction == Gdk::ScrollDirection::UP)
618
+ end; alias scroll_up_event? scroll_up? # === scroll_up_event?
619
+
620
+ # ========================================================================= #
621
+ # === pretty_tooltip
622
+ # ========================================================================= #
623
+ def pretty_tooltip(i)
624
+ if i and i.include?('&')
625
+ i = i.dup if i.frozen?
626
+ # ===================================================================== #
627
+ # Oddly enough, ruby-gtk2 complains about this character.
628
+ #
629
+ # The warning was: "Gtk-WARNING **: Failed to set text from
630
+ # markup due to error parsing markup" [...] Entity did not
631
+ # end with a semicolon; most likely you used an ampersand
632
+ # character without intending to start an entity - escape
633
+ # ampersand as &"
634
+ # So we do this ^^^.
635
+ # ===================================================================== #
636
+ i.gsub!(/&/, '&')
637
+ end
638
+ set_tooltip_markup(i)
639
+ end; alias pretty_tooltip= pretty_tooltip # === pretty_tooltip=
640
+ alias fancy_tooltip= pretty_tooltip # === fancy_tooltip=
641
+ alias fancy_tooltips= pretty_tooltip # === fancy_tooltips=
642
+ alias hint= pretty_tooltip # === hint=
643
+ alias info pretty_tooltip # === info
644
+ alias popup_hint pretty_tooltip # === popup_hint
645
+ alias fancy_tip pretty_tooltip # === fancy_tip
646
+ alias fancy_hint pretty_tooltip # === fancy_hint
647
+ alias fancy_hint= pretty_tooltip # === fancy_hint=
648
+ alias set_hovertip pretty_tooltip # === set_hovertip
649
+
650
+ # ========================================================================= #
651
+ # === scroll_down?
652
+ #
653
+ # This method returns true if the scroll-event (of the middle mouse
654
+ # button) is going downwards.
655
+ # ========================================================================= #
656
+ def scroll_down?(event)
657
+ (event.event_type.name == 'GDK_SCROLL') and
658
+ (event.direction == Gdk::ScrollDirection::DOWN)
659
+ end; alias scroll_down_event? scroll_down? # === scroll_down_event?
660
+
661
+ # ========================================================================= #
662
+ # === enable_scroll_events
663
+ #
664
+ # This method will enable scroll-events for a particular widget, such
665
+ # as a Gtk::Entry instance.
666
+ #
667
+ # Note that set_events() is less flexible as it can not be used on
668
+ # widgets that have already been realized.
669
+ # ========================================================================= #
670
+ def enable_scroll_events
671
+ if ::Gtk.use_gtk2? # assume ruby-gtk2 here.
672
+ add_events(Gdk::EventMask::SCROLL_MASK)
673
+ else
674
+ add_events(:scroll_mask)
675
+ end
676
+ end; alias add_scroll_event enable_scroll_events # === add_scroll_event
677
+
678
+ # ========================================================================= #
679
+ # === set_scroll_event
680
+ # ========================================================================= #
681
+ def set_scroll_event
682
+ set_events(Gdk::EventMask::SCROLL_MASK) # Enable scroll-events here.
683
+ end
684
+
685
+ # ========================================================================= #
686
+ # === rounded_border
687
+ #
688
+ # This method can be used to "assign" a rounded border to a gtk-widget.
689
+ #
690
+ # This functionality depends on CSS rules.
691
+ #
692
+ # Usage examples:
693
+ #
694
+ # .rounded_border('12px')
695
+ # .rounded_border('12px', :default)
696
+ # .rounded_border('12px', :default, '10px solid darkgreen')
697
+ #
698
+ # ========================================================================= #
699
+ def rounded_border(
700
+ i = 12,
701
+ use_this_CSS_name = :default,
702
+ regular_border = '1px solid steelblue' # This has to be supplied by the user.
703
+ )
704
+ case use_this_CSS_name
705
+ when :default
706
+ use_this_CSS_name = '.border'
707
+ end
708
+ if use_this_CSS_name.frozen?
709
+ use_this_CSS_name = use_this_CSS_name.dup
710
+ end
711
+ css_rules_to_apply = "\n#{use_this_CSS_name}#{i.to_s.delete('px')} {\n".dup
712
+ css_rules_to_apply << ' border: '+regular_border.to_s.delete(';')+';'+"\n"
713
+ css_rules_to_apply << ' border-radius: '+i.to_s.delete('px')+'px;'+"\n"
714
+ css_rules_to_apply << "}\n"
715
+ ::Gtk.add_to_the_toplevel_CSS_string(css_rules_to_apply)
716
+ _ = "#{use_this_CSS_name}#{i.to_s.delete('px')}".delete('.')
717
+ css_class(_)
718
+ end
719
+
720
+ # ========================================================================= #
721
+ # === add_hspacer
722
+ # ========================================================================= #
723
+ def add_hspacer
724
+ add(horizontal_line)
725
+ end; alias add_horizontal_spacer add_hspacer # === add_horizontal_spacer
726
+
727
+ # ========================================================================= #
728
+ # === horizontal_line
729
+ # ========================================================================= #
730
+ def horizontal_line
731
+ return ::Gtk.horizontal_spacer
732
+ end
733
+
734
+ # ========================================================================= #
735
+ # === align_to_the_middle
736
+ # ========================================================================= #
737
+ def align_to_the_middle
738
+ if respond_to? :set_alignment # Must safeguard it.
739
+ set_alignment(0.5)
740
+ end
741
+ end
742
+
743
+ # ========================================================================= #
744
+ # === set_markify_text
745
+ #
746
+ # This method combines two different methods in one, aka .set_text()
747
+ # and then a call to .do_markify().
748
+ # ========================================================================= #
749
+ def set_markify_text(i)
750
+ set_text(i.to_s)
751
+ do_markify
752
+ end
753
+
754
+ # ========================================================================= #
755
+ # === align_into_the_center
756
+ # ========================================================================= #
757
+ def align_into_the_center
758
+ set_halign(::Gtk::Align::CENTER)
22
759
  end
23
760
 
761
+ # ========================================================================= #
762
+ # === add_button_press_events
763
+ # ========================================================================= #
764
+ def add_button_press_events
765
+ if ::Gtk.use_gtk2?
766
+ add_events(Gdk::Event::BUTTON_PRESS_MASK)
767
+ elsif ::Gtk.use_gtk3? # else for ruby-gtk3
768
+ add_events(Gdk::EventMask::BUTTON_PRESS_MASK)
769
+ elsif ::Gtk.use_gtk4?
770
+ e '.add_events() has to be changed for ruby-gtk4.'
771
+ end
772
+ end; alias enable_context_menu_on_button_click_events add_button_press_events # === enable_context_menu_on_button_click_events
773
+ alias enable_context_menu add_button_press_events # === enable_context_menu
774
+
24
775
  # ========================================================================= #
25
776
  # === add_css_class
26
777
  #
@@ -35,119 +786,112 @@ class Widget
35
786
  # label.css_class('bblack2')
36
787
  #
37
788
  # ========================================================================= #
38
- def add_css_class(i)
39
- if respond_to? :style_context
40
- if i.is_a?(String) and i.include? ' '
41
- use_these_css_classes(i)
42
- else
43
- i = i.to_s if i.is_a? Symbol
44
- style_context.add_class(i)
45
- # =================================================================== #
46
- # Always register it after it was added.
47
- # =================================================================== #
48
- ::Gtk.register_this_css_class_is_in_use(i)
49
- end
789
+ def add_css_class(
790
+ i
791
+ )
792
+ if respond_to? :style_context
793
+ i = i.to_s if i.is_a? Symbol
794
+ add_to_the_CSS_style_context(i)
795
+ # ===================================================================== #
796
+ # Always register it after it was added.
797
+ # No, this can not be done - we need to add CSS rules elsewhere.
798
+ # ===================================================================== #
799
+ # ::Gtk.append_these_css_rules(i)
50
800
  end
51
- end; alias css_class add_css_class # === css_class
52
- alias css add_css_class # === css
53
- alias set_class add_css_class # === set_class
801
+ end; alias set_class add_css_class # === set_class
54
802
  alias set_css_class add_css_class # === set_css_class
803
+ alias css_class add_css_class # === css_class
804
+ alias css add_css_class # === css
55
805
  alias add_this_css_class add_css_class # === add_this_css_class
56
806
  alias add_css add_css_class # === add_this_css_class
57
807
  alias add_class add_css_class # === add_class
58
808
 
59
809
  # ========================================================================= #
60
- # === scroll_up?
810
+ # === add_to_the_CSS_style_context
61
811
  #
62
- # This method returns true if the scroll-event (of the middle mouse
63
- # button) is going upwards.
812
+ # This method must be guaranteed to work on style_context. Thus, it can
813
+ # only work properly if style_context() actually returns something useful.
64
814
  # ========================================================================= #
65
- def scroll_up?(event)
66
- (event.event_type.name == 'GDK_SCROLL') and
67
- (event.direction == Gdk::ScrollDirection::UP)
68
- end; alias scroll_up_event? scroll_up? # === scroll_up_event?
815
+ def add_to_the_CSS_style_context(i)
816
+ style_context.add_class(i)
817
+ end
69
818
 
70
819
  # ========================================================================= #
71
- # === scroll_down?
820
+ # === use_these_css_classes
821
+ #
822
+ # This method allows for some convenience in regards to using CSS
823
+ # classes. You can pass several CSS classes into this method.
824
+ #
825
+ # It is important to separate these CSS classes via a
826
+ # ' ' character specifically.
827
+ #
828
+ # Specific usage example:
829
+ #
830
+ # @frame.use_these_css_classes('no_box_shadow bblack2 BG_black pad0px mar0px')
72
831
  #
73
- # This method returns true if the scroll-event (of the middle mouse
74
- # button) is going downwards.
75
832
  # ========================================================================= #
76
- def scroll_down?(event)
77
- (event.event_type.name == 'GDK_SCROLL') and
78
- (event.direction == Gdk::ScrollDirection::DOWN)
79
- end; alias scroll_down_event? scroll_down? # === scroll_down_event?
833
+ def use_these_css_classes(i)
834
+ # ======================================================================= #
835
+ # The input has to have a ' ' character, if this method is to work.
836
+ # ======================================================================= #
837
+ if i and i.include?(' ')
838
+ i.split(' ').each {|this_css_class|
839
+ css_class(this_css_class)
840
+ }
841
+ else
842
+ e 'The given input (`'+i.to_s+'`) does not have a " " character.'
843
+ end
844
+ end; alias use_these_CSS_classes use_these_css_classes # === use_these_CSS_classes
845
+ alias css_classes use_these_css_classes # === css_classes
80
846
 
81
847
  # ========================================================================= #
82
- # === pack_without_expand (minimal tag)
848
+ # === on_click_event
849
+ #
850
+ # This is a shortcut to respond to an on-click event, which is the
851
+ # left mouse click normally.
852
+ #
853
+ # You can enable this in your code by doing:
854
+ #
855
+ # .on_click_event { :highlight_text }
856
+ # .on_click_event { :deselect_text }
857
+ #
83
858
  # ========================================================================= #
84
- def pack_without_expand(
85
- widget,
86
- padding_to_use = 0
87
- )
88
- # ======================================================================= #
89
- # The second argument may be a Hash. If this is the case we check for
90
- # it's "type".
91
- # ======================================================================= #
92
- if padding_to_use.is_a? Hash
93
- work_on_a_copy = padding_to_use.dup # To avoid side-effects.
859
+ def on_click_event
860
+ if block_given?
861
+ yielded = yield
862
+ case yielded
94
863
  # ===================================================================== #
95
- # === :padding
864
+ # === :highlight_text
96
865
  # ===================================================================== #
97
- if work_on_a_copy.has_key? :padding
98
- padding_to_use = work_on_a_copy[:padding]
99
- end
100
- end
101
- # ======================================================================= #
102
- # === Handle ruby-gtk2 first
103
- # ======================================================================= #
104
- if ::Gtk.use_gtk2?
105
- begin
106
- pack_start(
107
- widget,
108
- false,
109
- false,
110
- padding_to_use
111
- )
112
- rescue ArgumentError => error
113
- puts 'An error happened in '+__FILE__+' (method: pack_without_expand())'
114
- pp error
115
- puts 'caller() was:'
116
- pp caller()
117
- exit
118
- end
119
- else # else handle ruby-gtk3
120
- pack_start(
121
- widget,
122
- expand: false,
123
- fill: false,
124
- padding: padding_to_use
125
- )
866
+ when :highlight_text,
867
+ :select_everything,
868
+ :select_text
869
+ on_button_press_event { |widget, event|
870
+ set_focus(true)
871
+ select_region(0, -1)
872
+ }
873
+ # ===================================================================== #
874
+ # === :deselect_text
875
+ #
876
+ # This will deselect any selection on a gtk-entry. It is not as
877
+ # useful as the :highlight_text functionality, but I wanted to
878
+ # provide both, simply to quickly show how it is done.
879
+ # ===================================================================== #
880
+ when :deselect_text
881
+ on_button_press_event { |widget, event|
882
+ set_focus(true)
883
+ select_region(0, 0)
884
+ }
885
+ end
126
886
  end
127
- end; alias pack_minimal pack_without_expand # === pack_minimal
128
- alias minimal pack_without_expand # === minimal
129
- alias append pack_without_expand # === append
887
+ end
130
888
 
131
- require 'gtk_paradise/fonts/fonts.rb'
132
889
  # ========================================================================= #
133
- # === use_this_font=
890
+ # === shadow_type_etched_in
134
891
  # ========================================================================= #
135
- def use_this_font=(
136
- i = 'EmojiOne Color 22'
137
- )
138
- if i.is_a?(String) or i.is_a?(Symbol)
139
- i = ::Gtk.expand_this_font(i)
140
- i = Pango::FontDescription.new(i.to_s)
141
- end
142
- if ::Gtk.use_gtk2?
143
- modify_font(i)
144
- else
145
- override_font(i)
146
- end
147
- end; alias use_this_font use_this_font= # === use_this_font
148
- alias set_use_this_font use_this_font= # === set_use_this_font
149
- alias try_to_use_this_font use_this_font= # === try_to_use_this_font
150
- alias fonty use_this_font= # === fonty
892
+ def shadow_type_etched_in
893
+ set_shadow_type(::Gtk::SHADOW_ETCHED_IN)
894
+ end
151
895
 
152
896
  # ========================================================================= #
153
897
  # === align_to_right
@@ -156,47 +900,6 @@ class Widget
156
900
  set_halign(:end) # halign=Gtk.Align.END
157
901
  end
158
902
 
159
- # ========================================================================= #
160
- # === align_to_center
161
- #
162
- # This method will align towards the center. Note that not all widgets
163
- # respond to this naturally; it is best to use this for gtk-entry
164
- # widgets and perhaps gtk-label and similar widgets.
165
- # ========================================================================= #
166
- def align_to_center
167
- self.xalign = 0.5
168
- end; alias align_to_the_center align_to_center # === align_to_the_center
169
- alias center align_to_center # === center
170
- alias do_center align_to_center # === do_center
171
- alias to_center align_to_center # === to_center
172
- alias to_the_middle align_to_center # === to_the_middle
173
- alias align_into_the_middle align_to_center # === align_into_the_middle
174
- alias center_align align_to_center # === center_align
175
-
176
- # ========================================================================= #
177
- # === enable_scroll_events
178
- #
179
- # This method will enable scroll-events for a particular widget, such
180
- # as a Gtk::Entry instance.
181
- #
182
- # Note that set_events() is less flexible as it can not be used on
183
- # widgets that have already been realized.
184
- # ========================================================================= #
185
- def enable_scroll_events
186
- if ::Gtk.use_gtk2? # assume ruby-gtk2 here.
187
- add_events(Gdk::EventMask::SCROLL_MASK)
188
- else
189
- add_events(:scroll_mask)
190
- end
191
- end; alias add_scroll_event enable_scroll_events # === add_scroll_event
192
-
193
- # ========================================================================= #
194
- # === set_scroll_event
195
- # ========================================================================= #
196
- def set_scroll_event
197
- set_events(Gdk::EventMask::SCROLL_MASK) # Enable scroll-events here.
198
- end
199
-
200
903
  # ========================================================================= #
201
904
  # === enable_markup
202
905
  # ========================================================================= #
@@ -206,33 +909,6 @@ class Widget
206
909
  alias parse_markup enable_markup # === parse_markup
207
910
  alias markify enable_markup # === markify
208
911
 
209
- # ========================================================================= #
210
- # === pretty_tooltip
211
- # ========================================================================= #
212
- def pretty_tooltip(i)
213
- if i and i.include?('&')
214
- i = i.dup if i.frozen?
215
- # ===================================================================== #
216
- # Oddly enough, ruby-gtk2 complains about this character.
217
- # The warning was: "Gtk-WARNING **: Failed to set text from
218
- # markup due to error parsing markup" [...] Entity did not
219
- # end with a semicolon; most likely you used an ampersand
220
- # character without intending to start an entity - escape
221
- # ampersand as &amp;"
222
- # So we do this ^^^.
223
- # ===================================================================== #
224
- i.gsub!(/&/, '&amp;')
225
- end
226
- set_tooltip_markup(i)
227
- end; alias pretty_tooltip= pretty_tooltip # === pretty_tooltip=
228
- alias fancy_tooltip= pretty_tooltip # === fancy_tooltip=
229
- alias fancy_tooltips= pretty_tooltip # === fancy_tooltips=
230
- alias hint= pretty_tooltip # === hint=
231
- alias info pretty_tooltip # === info
232
- alias popup_hint pretty_tooltip # === popup_hint
233
- alias fancy_tip pretty_tooltip # === fancy_tip
234
- alias set_hovertip pretty_tooltip # === set_hovertip
235
-
236
912
  # ========================================================================= #
237
913
  # === enable_all_events
238
914
  #
@@ -354,64 +1030,12 @@ class Widget
354
1030
  end; alias on_right_mouse_button_click on_right_mouse_button_clicked # === on_right_mouse_button_click
355
1031
  alias on_right_mouse_button_click_event on_right_mouse_button_clicked # === on_right_mouse_button_click_event
356
1032
 
357
- # ========================================================================= #
358
- # === on_hover
359
- #
360
- # This method can be used to modify the colour of a given widget, on
361
- # a "on-hover" event.
362
- #
363
- # Usage example:
364
- #
365
- # on_hover(:lightblue)
366
- #
367
- # ========================================================================= #
368
- def on_hover(
369
- this_colour = :lightgreen, &block
370
- )
371
- modify_background(
372
- :on_hover, this_colour, &block
373
- )
374
- end; alias on_hover_colour on_hover # === on_hover_colour
375
-
376
1033
  # ========================================================================= #
377
1034
  # === padding=
378
1035
  # ========================================================================= #
379
1036
  def padding=(i)
380
1037
  set_border_width(i)
381
- end; alias padding padding= # === padding
382
-
383
- # ========================================================================= #
384
- # === hcenter
385
- #
386
- # The name "hcenter" is an abbreviation for "horizontal center" position.
387
- # ========================================================================= #
388
- def hcenter(
389
- i = :center
390
- )
391
- case i
392
- when :center
393
- i = ::Gtk::Align::CENTER
394
- end
395
- set_halign(i) # Or Gtk::Align::CENTER
396
- end; alias horizontal_center hcenter # === horizontal_center
397
- alias halign_center hcenter # === halign_center
398
- alias hjustify hcenter # === hjustify
399
-
400
- # ========================================================================= #
401
- # === add_hspacer
402
- # ========================================================================= #
403
- def add_hspacer
404
- add(::Gtk.horizontal_spacer)
405
- end; alias add_horizontal_spacer add_hspacer # === add_horizontal_spacer
406
-
407
- # ========================================================================= #
408
- # === align_to_the_middle
409
- # ========================================================================= #
410
- def align_to_the_middle
411
- if respond_to? :set_alignment # Must safeguard it.
412
- set_alignment(0.5)
413
- end
414
- end
1038
+ end; alias padding padding= # === padding
415
1039
 
416
1040
  # ========================================================================= #
417
1041
  # === connect_to
@@ -439,17 +1063,6 @@ class Widget
439
1063
  signal_connect(:changed, &block)
440
1064
  end; alias on_changed_event on_changed # === on_changed_event
441
1065
 
442
- # ========================================================================= #
443
- # === do_focus
444
- #
445
- # This variant is a slightly nicer-looking variant compared to the
446
- # .set_focus(true) variant.
447
- # ========================================================================= #
448
- def do_focus
449
- set_focus(true)
450
- end; alias do_focus_on_it do_focus # === do_focus_on_it
451
- alias do_select do_focus # === do_select
452
-
453
1066
  # ========================================================================= #
454
1067
  # === on_switch_page
455
1068
  #
@@ -460,32 +1073,6 @@ class Widget
460
1073
  end; alias on_tab_switch on_switch_page # === on_tab_switch
461
1074
  alias on_switched_tab on_switch_page # === on_switched_tab
462
1075
 
463
- # ========================================================================= #
464
- # === use_these_css_classes
465
- #
466
- # This method allows for some convenience in regards to using CSS
467
- # classes. You can pass several CSS classes into this method.
468
- #
469
- # It is important to separate these CSS classes via a
470
- # ' ' character specifically.
471
- #
472
- # Specific usage example:
473
- #
474
- # @frame.use_these_css_classes('no_box_shadow bblack2 BG_black pad0px mar0px')
475
- #
476
- # ========================================================================= #
477
- def use_these_css_classes(i)
478
- # The input has to have a ' ' character, if this method is to work.
479
- if i and i.include?(' ')
480
- i.split(' ').each {|this_css_class|
481
- css_class(this_css_class)
482
- }
483
- else
484
- e 'The given input ('+i.to_s+') does not have a " " character.'
485
- end
486
- end; alias use_these_CSS_classes use_these_css_classes # === use_these_CSS_classes
487
- alias css_classes use_these_css_classes # === css_classes
488
-
489
1076
  # ========================================================================= #
490
1077
  # === pad1px
491
1078
  # ========================================================================= #
@@ -626,6 +1213,76 @@ class Widget
626
1213
  css_class('pad20px')
627
1214
  end
628
1215
 
1216
+ # ========================================================================= #
1217
+ # === mar1px
1218
+ # ========================================================================= #
1219
+ def mar1px
1220
+ css_class('mar1px')
1221
+ end
1222
+
1223
+ # ========================================================================= #
1224
+ # === mar2px
1225
+ # ========================================================================= #
1226
+ def mar2px
1227
+ css_class('mar2px')
1228
+ end
1229
+
1230
+ # ========================================================================= #
1231
+ # === mar3px
1232
+ # ========================================================================= #
1233
+ def mar3px
1234
+ css_class('mar3px')
1235
+ end
1236
+
1237
+ # ========================================================================= #
1238
+ # === mar4px
1239
+ # ========================================================================= #
1240
+ def mar4px
1241
+ css_class('mar4px')
1242
+ end
1243
+
1244
+ # ========================================================================= #
1245
+ # === mar5px
1246
+ # ========================================================================= #
1247
+ def mar5px
1248
+ css_class('mar5px')
1249
+ end
1250
+
1251
+ # ========================================================================= #
1252
+ # === mar6px
1253
+ # ========================================================================= #
1254
+ def mar6px
1255
+ css_class('mar6px')
1256
+ end
1257
+
1258
+ # ========================================================================= #
1259
+ # === mar7px
1260
+ # ========================================================================= #
1261
+ def mar7px
1262
+ css_class('mar7px')
1263
+ end
1264
+
1265
+ # ========================================================================= #
1266
+ # === mar8px
1267
+ # ========================================================================= #
1268
+ def mar8px
1269
+ css_class('mar8px')
1270
+ end
1271
+
1272
+ # ========================================================================= #
1273
+ # === mar9px
1274
+ # ========================================================================= #
1275
+ def mar9px
1276
+ css_class('mar9px')
1277
+ end
1278
+
1279
+ # ========================================================================= #
1280
+ # === mar10px
1281
+ # ========================================================================= #
1282
+ def mar10px
1283
+ css_class('mar10px')
1284
+ end
1285
+
629
1286
  require 'gtk_paradise/colours/parse.rb'
630
1287
  # ========================================================================= #
631
1288
  # === modify_foreground
@@ -745,52 +1402,6 @@ class Widget
745
1402
  end
746
1403
  end
747
1404
 
748
- # ========================================================================= #
749
- # === bblack1px
750
- # ========================================================================= #
751
- def bblack1px
752
- css_class('bblack1')
753
- end; alias bblack1 bblack1px # === bblack1
754
-
755
- # ========================================================================= #
756
- # === bblack2px
757
- # ========================================================================= #
758
- def bblack2px
759
- css_class('bblack2')
760
- end; alias bblack2 bblack2px # === bblack2
761
-
762
- # ========================================================================= #
763
- # === bblack3px
764
- # ========================================================================= #
765
- def bblack3px
766
- css_class('bblack3')
767
- end; alias bblack3 bblack3px # === bblack3
768
-
769
- # ========================================================================= #
770
- # === bblack4px
771
- # ========================================================================= #
772
- def bblack4px
773
- css_class('bblack4')
774
- end; alias bblack4 bblack4px # === bblack4
775
-
776
- # ========================================================================= #
777
- # === bblack5px
778
- # ========================================================================= #
779
- def bblack5px
780
- css_class('bblack5')
781
- end; alias bblack5 bblack5px # === bblack5
782
-
783
- # ========================================================================= #
784
- # === remove_css_class
785
- #
786
- # This method can be used to remove a particular CSS class from a
787
- # widget.
788
- # ========================================================================= #
789
- def remove_css_class(this_css_class)
790
- context = style_context
791
- context.remove_class(this_css_class)
792
- end; alias remove_this_css_class remove_css_class # === remove_this_css_class
793
-
794
1405
  # ========================================================================= #
795
1406
  # === sync_connect
796
1407
  #
@@ -822,6 +1433,13 @@ class Widget
822
1433
  )
823
1434
  if ::Gtk.use_gtk2?
824
1435
  pack_start(widget, true, true, padding_to_use)
1436
+ elsif ::Gtk.use_gtk4?
1437
+ append(widget)
1438
+ if padding_to_use
1439
+ css_class(
1440
+ 'pad'+padding_to_use.to_s+'px'
1441
+ )
1442
+ end
825
1443
  else
826
1444
  pack_start(widget, expand: true, fill: true, padding: padding_to_use)
827
1445
  end
@@ -868,20 +1486,6 @@ class Widget
868
1486
  set_border_width(8)
869
1487
  end
870
1488
 
871
- # ========================================================================= #
872
- # === intelligent_exit
873
- # ========================================================================= #
874
- def intelligent_exit
875
- signal_connect(:destroy) { ::Gtk.main_quit }
876
- end
877
-
878
- # ========================================================================= #
879
- # === quit_on_child_exited_signal
880
- # ========================================================================= #
881
- def quit_on_child_exited_signal
882
- signal_connect(:child_exited) { gtk_main_quit }
883
- end
884
-
885
1489
  # ========================================================================= #
886
1490
  # === on_button_press_event
887
1491
  # ========================================================================= #
@@ -889,48 +1493,6 @@ class Widget
889
1493
  signal_connect(:button_press_event, &block)
890
1494
  end
891
1495
 
892
- # ========================================================================= #
893
- # === on_click_event
894
- #
895
- # This is a shortcut to respond to an on-click event, which is the
896
- # left mouse click normally.
897
- #
898
- # You can enable this in your code by doing:
899
- #
900
- # .on_click_event { :highlight_text }
901
- # .on_click_event { :deselect_text }
902
- #
903
- # ========================================================================= #
904
- def on_click_event
905
- if block_given?
906
- yielded = yield
907
- case yielded
908
- # ===================================================================== #
909
- # === :highlight_text
910
- # ===================================================================== #
911
- when :highlight_text,
912
- :select_everything,
913
- :select_text
914
- on_button_press_event { |widget, event|
915
- set_focus(true)
916
- select_region(0, -1)
917
- }
918
- # ===================================================================== #
919
- # === :deselect_text
920
- #
921
- # This will deselect any selection on a gtk-entry. It is not as
922
- # useful as the :highlight_text functionality, but I wanted to
923
- # provide both, simply to quickly show how it is done.
924
- # ===================================================================== #
925
- when :deselect_text
926
- on_button_press_event { |widget, event|
927
- set_focus(true)
928
- select_region(0, 0)
929
- }
930
- end
931
- end
932
- end
933
-
934
1496
  # ========================================================================= #
935
1497
  # === on_key_pressed
936
1498
  #
@@ -952,61 +1514,6 @@ class Widget
952
1514
  alias on_enter_key_clicked on_key_pressed # === on_enter_key_clicked
953
1515
  alias on_the_enter_key_was_pressed on_key_pressed # === on_the_enter_key_was_pressed
954
1516
 
955
- # ========================================================================= #
956
- # === set_background_colour
957
- #
958
- # This method can be used to designate a specific background colour
959
- # for a Gtk::Button.
960
- # ========================================================================= #
961
- def set_background_colour(
962
- i = :whitesmoke
963
- )
964
- if ::Gtk.use_gtk2?
965
- modify_bg(
966
- ::Gtk::STATE_NORMAL,
967
- Gdk::Color.parse(i.to_s)
968
- )
969
- else
970
- if i.is_a? Gdk::Color
971
- # =================================================================== #
972
- # Convert it into RGB values next.
973
- # =================================================================== #
974
- array = [
975
- (i.red * 100.0 / 65535) / 100,
976
- (i.green * 100.0 / 65535) / 100,
977
- (i.blue * 100.0 / 65535) / 100,
978
- 1.0
979
- ]
980
- i = Gdk::RGBA.new(*array)
981
- end
982
- override_background_color(:normal, i)
983
- end
984
- @background_colour = i
985
- end; alias set_background_color set_background_colour # === set_background_color
986
- alias bg_colour set_background_colour # === bg_colour
987
- alias bg_colour= set_background_colour # === bg_colour=
988
- alias bg_color set_background_colour # === bg_colour
989
- alias background set_background_colour # === background
990
- alias background= set_background_colour # === background=
991
- alias background_color set_background_colour # === background_color
992
- alias background_colour set_background_colour # === background_colour
993
- alias background_colour= set_background_colour # === background_colour=
994
- alias background_color= set_background_colour # === background_color=
995
- alias set_background set_background_colour # === set_background
996
- alias change_background_to set_background_colour # === change_background_to
997
- alias change_background_colour_to set_background_colour # === change_background_colour_to
998
- alias change_background_color_to set_background_colour # === change_background_color_to
999
-
1000
- # ========================================================================= #
1001
- # === clear_background
1002
- #
1003
- # This method will clear the border.
1004
- # ========================================================================= #
1005
- def clear_background
1006
- css_class('clear_background')
1007
- end; alias clear_border clear_background # === clear_border
1008
- alias remove_background clear_background # === remove_background
1009
-
1010
1517
  # ========================================================================= #
1011
1518
  # === do_focus
1012
1519
  # ========================================================================= #
@@ -1033,50 +1540,16 @@ class Widget
1033
1540
  else
1034
1541
  _ << text_to_display.to_s
1035
1542
  end
1036
- }
1037
- set_markup(_)
1038
- end
1039
-
1040
- # ========================================================================= #
1041
- # === focus_in_event
1042
- # ========================================================================= #
1043
- def focus_in_event(&block)
1044
- signal_connect(:focus_in_event, &block)
1045
- end; alias on_focus_in_event focus_in_event # === on_focus_in_event
1046
-
1047
- # ========================================================================= #
1048
- # === add_button_press_events
1049
- # ========================================================================= #
1050
- def add_button_press_events
1051
- if ::Gtk.use_gtk2?
1052
- add_events(Gdk::Event::BUTTON_PRESS_MASK)
1053
- else # else for ruby-gtk3
1054
- add_events(Gdk::EventMask::BUTTON_PRESS_MASK)
1055
- end
1056
- end; alias enable_context_menu_on_button_click_events add_button_press_events # === enable_context_menu_on_button_click_events
1057
- alias enable_context_menu add_button_press_events # === enable_context_menu
1543
+ }
1544
+ set_markup(_)
1545
+ end
1058
1546
 
1059
1547
  # ========================================================================= #
1060
- # === set_font
1061
- #
1062
- # This is a slightly simpler way to set the font. We also allow for
1063
- # Symbols here, such as :hack_25. This refers to the font called "Hack",
1064
- # with a size of 25. Not all symbols are enabled, mind you - I only use
1065
- # some, but may extend more over the coming months and years.
1548
+ # === focus_in_event
1066
1549
  # ========================================================================= #
1067
- def set_font(
1068
- i = :dejavu_condensed_50
1069
- )
1070
- if i.is_a? Symbol
1071
- i = ::Gtk.expand_this_font(i)
1072
- end
1073
- i = Pango::FontDescription.new(i)
1074
- if ::Gtk.use_gtk2?
1075
- modify_font(i)
1076
- else
1077
- override_font(i)
1078
- end
1079
- end; alias font set_font # === font
1550
+ def focus_in_event(&block)
1551
+ signal_connect(:focus_in_event, &block)
1552
+ end; alias on_focus_in_event focus_in_event # === on_focus_in_event
1080
1553
 
1081
1554
  # ========================================================================= #
1082
1555
  # === width_height
@@ -1090,10 +1563,14 @@ class Widget
1090
1563
 
1091
1564
  # ========================================================================= #
1092
1565
  # === grey_out
1566
+ #
1567
+ # This is typically used for gtk-button, to "grey" out the button, thus
1568
+ # make it no longer sensitive to user-input change.
1093
1569
  # ========================================================================= #
1094
1570
  def grey_out
1095
1571
  set_sensitive(false)
1096
- end; alias not_sensitive grey_out # === not_sensitive
1572
+ end; alias not_sensitive grey_out # === not_sensitive
1573
+ alias is_insensitive grey_out # === is_insensitive
1097
1574
 
1098
1575
  # ========================================================================= #
1099
1576
  # === grey_in
@@ -1112,6 +1589,8 @@ class Widget
1112
1589
 
1113
1590
  # ========================================================================= #
1114
1591
  # === transition_change_background_to
1592
+ #
1593
+ # The first argument should be the target colour.
1115
1594
  # ========================================================================= #
1116
1595
  def transition_change_background_to(
1117
1596
  to_this_colour = :lightgreen,
@@ -1173,7 +1652,6 @@ class Widget
1173
1652
  signal_connect(:key_press_event, &block)
1174
1653
  end
1175
1654
 
1176
- require 'gtk_paradise/toplevel_methods/tooltips.rb'
1177
1655
  # ========================================================================= #
1178
1656
  # === tooltip=
1179
1657
  # ========================================================================= #
@@ -1188,101 +1666,6 @@ class Widget
1188
1666
  signal_connect(:value_changed, &block)
1189
1667
  end
1190
1668
 
1191
- # ========================================================================= #
1192
- # === modify_background
1193
- #
1194
- # This method will set the background colour for a widget in a
1195
- # particular state. All other style values are left untouched.
1196
- # See also Gtk::Widget#modify_style.
1197
- #
1198
- # The arguments are:
1199
- #
1200
- # state: the state(GtkStateType) for which to set the
1201
- # background color.
1202
- #
1203
- # colour: the Gdk::Color to assign (does not need to
1204
- # be allocated).
1205
- #
1206
- # ========================================================================= #
1207
- def modify_background(
1208
- state,
1209
- colour = nil,
1210
- &block
1211
- )
1212
- # ======================================================================= #
1213
- # === Handle Hashes first, for the variable state
1214
- # ======================================================================= #
1215
- if colour.is_a? Hash
1216
- if colour.has_key? :colour
1217
- colour = colour.delete(:colour)
1218
- end
1219
- end
1220
- case state
1221
- # ======================================================================= #
1222
- # === :normal
1223
- #
1224
- # This entry point is the default entry point.
1225
- # ======================================================================= #
1226
- when :normal,
1227
- :default
1228
- if Gtk.do_we_use_gtk2?
1229
- state = ::Gtk::STATE_NORMAL
1230
- else
1231
- state = :normal
1232
- end
1233
- # ======================================================================= #
1234
- # === :active
1235
- # ======================================================================= #
1236
- when :active
1237
- if Gtk.do_we_use_gtk2?
1238
- state = ::Gtk::STATE_ACTIVE
1239
- else
1240
- state = :active
1241
- end
1242
- # ======================================================================= #
1243
- # === :prelight
1244
- # ======================================================================= #
1245
- when :prelight,
1246
- :hover,
1247
- :on_hover
1248
- if Gtk.do_we_use_gtk2?
1249
- state = ::Gtk::STATE_PRELIGHT
1250
- else
1251
- state = :prelight
1252
- end
1253
- end
1254
- # ======================================================================= #
1255
- # === Handle blocks next
1256
- # ======================================================================= #
1257
- if block_given?
1258
- yielded = yield
1259
- if yielded.is_a?(Symbol)
1260
- colour = yielded
1261
- end
1262
- end
1263
- if colour.is_a? Symbol
1264
- # ===================================================================== #
1265
- # Convert it into a Gtk::Colours representation. We could check if it
1266
- # is a valid html-colour, but for the time being we do not do this.
1267
- # ===================================================================== #
1268
- if Gtk.do_we_use_gtk2?
1269
- colour = ::Gtk.colour_parse(colour)
1270
- # =================================================================== #
1271
- # gtk3 now uses RGBA rather than Gdk.parse().
1272
- # RGBA stands for red, green, blue and alpha.
1273
- # The values go from 0.0 to 1.0. However had, it seems as if
1274
- # ruby-gtk3 also supports HTML colours directly, so no need
1275
- # to convert them.
1276
- # =================================================================== #
1277
- end
1278
- end
1279
- if Gtk.do_we_use_gtk2?
1280
- modify_bg(state, colour) # Delegate to the original method here.
1281
- else
1282
- override_background_color(state, colour)
1283
- end
1284
- end
1285
-
1286
1669
  # ========================================================================= #
1287
1670
  # === tooltip
1288
1671
  #
@@ -1296,7 +1679,7 @@ class Widget
1296
1679
  )
1297
1680
  if ::Gtk.use_gtk2?
1298
1681
  ::Gtk::Tooltips.new.set_tip(self, text_for_the_tooltip, nil)
1299
- else # else assume ruby-gtk3.
1682
+ else # else assume ruby-gtk3 or ruby-gtk4.
1300
1683
  if text_for_the_tooltip.is_a? String
1301
1684
  text_for_the_tooltip = { text: text_for_the_tooltip }
1302
1685
  end
@@ -1305,41 +1688,6 @@ class Widget
1305
1688
  end; alias use_this_tooltip tooltip # === use_this_tooltip
1306
1689
  # alias tooltip= tooltip # === tooltip=
1307
1690
 
1308
- # ========================================================================= #
1309
- # === modify_to_this_font
1310
- #
1311
- # This will modify the font for that particular widget at hand.
1312
- #
1313
- # Usage example:
1314
- #
1315
- # modify_this_font(:liberation)
1316
- #
1317
- # ========================================================================= #
1318
- def modify_to_this_font(
1319
- this_font = 'Sans 20'
1320
- )
1321
- this_font = ::Gtk.expand_this_font(this_font)
1322
- _ = Pango::FontDescription.new(this_font)
1323
- if Gtk.are_we_using_gtk2?
1324
- modify_font(_)
1325
- else
1326
- override_font(_)
1327
- end
1328
- end; alias modify_this_font modify_to_this_font # === modify_this_font
1329
- alias font_to_use= modify_to_this_font # === font_to_use=
1330
-
1331
- # ========================================================================= #
1332
- # === deselect
1333
- #
1334
- # Note that this method will NOT work on every gtk-widget; the primary
1335
- # use case has been for gtk-entry, but I figured that other gtk-widgets
1336
- # may benefit from this method as well, so it was added onto class
1337
- # Gtk::Widget.
1338
- # ========================================================================= #
1339
- def deselect
1340
- select_region(0, 0)
1341
- end
1342
-
1343
1691
  # ========================================================================= #
1344
1692
  # === read_only
1345
1693
  # ========================================================================= #
@@ -1402,12 +1750,16 @@ class Widget
1402
1750
  # ========================================================================= #
1403
1751
  # === make_bold
1404
1752
  #
1405
- # This method can be used to make a widget bold.
1753
+ # This method can be used to make a widget bold. In ruby-gtk4 this has
1754
+ # changed, though. I am not 100% positive yet, but I think it has
1755
+ # changed.
1406
1756
  # ========================================================================= #
1407
1757
  def make_bold
1408
- override_font(
1409
- Pango::FontDescription.new('bold')
1410
- )
1758
+ # if use_gtk3?
1759
+ override_font(
1760
+ Pango::FontDescription.new('bold')
1761
+ )
1762
+ #end
1411
1763
  end; alias bold make_bold # === bold
1412
1764
 
1413
1765
  # ========================================================================= #
@@ -1419,4 +1771,119 @@ class Widget
1419
1771
  signal_connect(:toggled, &block)
1420
1772
  end
1421
1773
 
1774
+ # ========================================================================= #
1775
+ # === quit_on_child_exited_signal
1776
+ # ========================================================================= #
1777
+ def quit_on_child_exited_signal
1778
+ signal_connect(:child_exited) { gtk_main_quit }
1779
+ end
1780
+
1781
+ # ========================================================================= #
1782
+ # === intelligent_exit
1783
+ # ========================================================================= #
1784
+ def intelligent_exit
1785
+ signal_connect(:destroy) { ::Gtk.main_quit }
1786
+ end
1787
+
1788
+ # ========================================================================= #
1789
+ # === pack_without_expand (minimal tag)
1790
+ # ========================================================================= #
1791
+ def pack_without_expand(
1792
+ widget,
1793
+ padding_to_use = 0
1794
+ )
1795
+ # ======================================================================= #
1796
+ # The second argument may be a Hash. If this is the case we check for
1797
+ # it's "type".
1798
+ # ======================================================================= #
1799
+ if padding_to_use.is_a? Hash
1800
+ work_on_a_copy = padding_to_use.dup # To avoid side-effects.
1801
+ # ===================================================================== #
1802
+ # === :padding
1803
+ # ===================================================================== #
1804
+ if work_on_a_copy.has_key? :padding
1805
+ padding_to_use = work_on_a_copy[:padding]
1806
+ end
1807
+ end
1808
+ # ======================================================================= #
1809
+ # === Handle ruby-gtk2 first
1810
+ # ======================================================================= #
1811
+ if ::Gtk.use_gtk2?
1812
+ begin
1813
+ pack_start(
1814
+ widget,
1815
+ false,
1816
+ false,
1817
+ padding_to_use
1818
+ )
1819
+ rescue ArgumentError => error
1820
+ puts 'An error happened in '+__FILE__+' (method: pack_without_expand())'
1821
+ pp error
1822
+ puts 'caller() was:'
1823
+ pp caller()
1824
+ exit
1825
+ end
1826
+ elsif ::Gtk.use_gtk4?
1827
+ # ===================================================================== #
1828
+ # === Handle ruby-gtk4 here
1829
+ # ===================================================================== #
1830
+ append(
1831
+ widget
1832
+ )
1833
+ if padding_to_use
1834
+ css_class(
1835
+ 'pad'+padding_to_use.to_s+'px'
1836
+ )
1837
+ end
1838
+ else # else handle ruby-gtk3
1839
+ pack_start(
1840
+ widget,
1841
+ expand: false,
1842
+ fill: false,
1843
+ padding: padding_to_use
1844
+ )
1845
+ end
1846
+ end; alias pack_minimal pack_without_expand # === pack_minimal
1847
+ alias minimal pack_without_expand # === minimal
1848
+ # ======================================================================= #
1849
+ # In the past we added an alias called append(). This is not
1850
+ # possible in ruby gtk4.
1851
+ # ======================================================================= #
1852
+ unless ::Gtk.use_gtk4?
1853
+ alias append pack_without_expand # === append
1854
+ end
1855
+
1856
+ # ========================================================================= #
1857
+ # === set_font
1858
+ #
1859
+ # This is a slightly simpler way to set the font. We also allow for
1860
+ # Symbols here, such as :hack_25. This refers to the font called "Hack",
1861
+ # with a size of 25. Not all symbols are enabled, mind you - I only use
1862
+ # some, but may extend more over the coming months and years.
1863
+ # ========================================================================= #
1864
+ def set_font(
1865
+ i = :dejavu_condensed_50
1866
+ )
1867
+ if i.is_a? Symbol
1868
+ i = ::Gtk.expand_this_font(i)
1869
+ end
1870
+ i = Pango::FontDescription.new(i)
1871
+ if ::Gtk.use_gtk2?
1872
+ modify_font(i)
1873
+ elsif ::Gtk.use_gtk3?
1874
+ override_font(i)
1875
+ elsif ::Gtk.use_gtk4?
1876
+ # ===================================================================== #
1877
+ # Add it as a CSS rule next:
1878
+ # ===================================================================== #
1879
+ use_this_new_CSS_rule = '.font_'+i.to_s.downcase.tr(' ','_')+' {
1880
+ font-family: '+i.to_s+';
1881
+ }
1882
+ '
1883
+ css_class(use_this_new_CSS_rule)
1884
+ else
1885
+ e 'Unknown engine in use.'
1886
+ end
1887
+ end; alias font set_font # === font
1888
+
1422
1889
  end; end