redcar-dev 0.12.17dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. data/CHANGES +664 -0
  2. data/LICENSE +32 -0
  3. data/README.md +119 -0
  4. data/Rakefile +283 -0
  5. data/bin/redcar +29 -0
  6. data/lib/redcar.rb +307 -0
  7. data/lib/redcar/installer.rb +178 -0
  8. data/lib/redcar/instance_exec.rb +25 -0
  9. data/lib/redcar/logger.rb +64 -0
  10. data/lib/redcar/plist.rb +83 -0
  11. data/lib/redcar/ruby_extensions.rb +201 -0
  12. data/lib/redcar/runner.rb +130 -0
  13. data/lib/redcar/usage.rb +42 -0
  14. data/lib/redcar_quick_start.rb +100 -0
  15. data/lib/regex_replace.rb +221 -0
  16. data/lib/tasks/app-bundle.rake +63 -0
  17. data/plugins/application/features/main_menu.feature +9 -0
  18. data/plugins/application/features/navigation_history.feature +66 -0
  19. data/plugins/application/features/step_definitions/command_steps.rb +10 -0
  20. data/plugins/application/features/step_definitions/dialog_steps.rb +25 -0
  21. data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +42 -0
  22. data/plugins/application/features/step_definitions/key_steps.rb +18 -0
  23. data/plugins/application/features/step_definitions/menu_steps.rb +42 -0
  24. data/plugins/application/features/step_definitions/navigation_history_steps.rb +4 -0
  25. data/plugins/application/features/step_definitions/speedbar_steps.rb +88 -0
  26. data/plugins/application/features/step_definitions/tree_steps.rb +107 -0
  27. data/plugins/application/features/step_definitions/window_steps.rb +17 -0
  28. data/plugins/application/features/support/env.rb +257 -0
  29. data/plugins/application/features/support/fake_event.rb +26 -0
  30. data/plugins/application/lib/application.rb +425 -0
  31. data/plugins/application/lib/application/assets/file.png +0 -0
  32. data/plugins/application/lib/application/clipboard.rb +95 -0
  33. data/plugins/application/lib/application/command.rb +108 -0
  34. data/plugins/application/lib/application/command/executor.rb +80 -0
  35. data/plugins/application/lib/application/command/history.rb +54 -0
  36. data/plugins/application/lib/application/commands/application_commands.rb +21 -0
  37. data/plugins/application/lib/application/commands/notebook_commands.rb +73 -0
  38. data/plugins/application/lib/application/commands/tab_commands.rb +105 -0
  39. data/plugins/application/lib/application/commands/treebook_commands.rb +117 -0
  40. data/plugins/application/lib/application/commands/window_commands.rb +68 -0
  41. data/plugins/application/lib/application/dialog.rb +170 -0
  42. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +123 -0
  43. data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
  44. data/plugins/application/lib/application/event_spewer.rb +32 -0
  45. data/plugins/application/lib/application/keymap.rb +41 -0
  46. data/plugins/application/lib/application/keymap/builder.rb +23 -0
  47. data/plugins/application/lib/application/menu.rb +117 -0
  48. data/plugins/application/lib/application/menu/builder.rb +80 -0
  49. data/plugins/application/lib/application/menu/builder/group.rb +47 -0
  50. data/plugins/application/lib/application/menu/item.rb +79 -0
  51. data/plugins/application/lib/application/menu/lazy_menu.rb +25 -0
  52. data/plugins/application/lib/application/navigation_history.rb +71 -0
  53. data/plugins/application/lib/application/notebook.rb +163 -0
  54. data/plugins/application/lib/application/sensitive.rb +57 -0
  55. data/plugins/application/lib/application/sensitivity.rb +82 -0
  56. data/plugins/application/lib/application/speedbar.rb +100 -0
  57. data/plugins/application/lib/application/tab.rb +92 -0
  58. data/plugins/application/lib/application/tab/command.rb +5 -0
  59. data/plugins/application/lib/application/toolbar.rb +83 -0
  60. data/plugins/application/lib/application/toolbar/builder.rb +80 -0
  61. data/plugins/application/lib/application/toolbar/builder/group.rb +47 -0
  62. data/plugins/application/lib/application/toolbar/item.rb +71 -0
  63. data/plugins/application/lib/application/toolbar/lazy_toolbar.rb +25 -0
  64. data/plugins/application/lib/application/tree.rb +94 -0
  65. data/plugins/application/lib/application/tree/command.rb +5 -0
  66. data/plugins/application/lib/application/tree/controller.rb +64 -0
  67. data/plugins/application/lib/application/tree/mirror.rb +132 -0
  68. data/plugins/application/lib/application/treebook.rb +83 -0
  69. data/plugins/application/lib/application/window.rb +274 -0
  70. data/plugins/application/plugin.rb +8 -0
  71. data/plugins/application/spec/application/application_spec.rb +23 -0
  72. data/plugins/application/spec/application/clipboard_spec.rb +55 -0
  73. data/plugins/application/spec/application/command/executor_spec.rb +78 -0
  74. data/plugins/application/spec/application/command/history_spec.rb +49 -0
  75. data/plugins/application/spec/application/command_spec.rb +78 -0
  76. data/plugins/application/spec/application/controllers/application_controller.rb +4 -0
  77. data/plugins/application/spec/application/controllers/notebook_controller.rb +4 -0
  78. data/plugins/application/spec/application/controllers/window_controller.rb +5 -0
  79. data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
  80. data/plugins/application/spec/application/menu/builder_spec.rb +61 -0
  81. data/plugins/application/spec/application/menu/menu_item_spec.rb +17 -0
  82. data/plugins/application/spec/application/menu_spec.rb +171 -0
  83. data/plugins/application/spec/application/navigation_history_spec.rb +96 -0
  84. data/plugins/application/spec/application/notebook_spec.rb +31 -0
  85. data/plugins/application/spec/application/sensitive_spec.rb +156 -0
  86. data/plugins/application/spec/application/speedbar_spec.rb +77 -0
  87. data/plugins/application/spec/application/treebook_spec.rb +27 -0
  88. data/plugins/application/spec/application/window_spec.rb +24 -0
  89. data/plugins/application/spec/spec_helper.rb +18 -0
  90. data/plugins/application_swt/build.xml +74 -0
  91. data/plugins/application_swt/lib/application_swt.rb +218 -0
  92. data/plugins/application_swt/lib/application_swt/bring_to_front.rb +53 -0
  93. data/plugins/application_swt/lib/application_swt/clipboard.rb +42 -0
  94. data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +180 -0
  95. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +233 -0
  96. data/plugins/application_swt/lib/application_swt/dialogs/input_dialog.rb +46 -0
  97. data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
  98. data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
  99. data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
  100. data/plugins/application_swt/lib/application_swt/dialogs/no_buttons_dialog.rb +24 -0
  101. data/plugins/application_swt/lib/application_swt/dialogs/text_and_file_dialog.rb +118 -0
  102. data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
  103. data/plugins/application_swt/lib/application_swt/html_tab.rb +79 -0
  104. data/plugins/application_swt/lib/application_swt/icon.rb +35 -0
  105. data/plugins/application_swt/lib/application_swt/listener_helpers.rb +20 -0
  106. data/plugins/application_swt/lib/application_swt/menu.rb +167 -0
  107. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +94 -0
  108. data/plugins/application_swt/lib/application_swt/notebook.rb +148 -0
  109. data/plugins/application_swt/lib/application_swt/notebook/tab_drag_and_drop_listener.rb +124 -0
  110. data/plugins/application_swt/lib/application_swt/notebook/tab_transfer.rb +83 -0
  111. data/plugins/application_swt/lib/application_swt/speedbar.rb +185 -0
  112. data/plugins/application_swt/lib/application_swt/speedbar/button_item.rb +20 -0
  113. data/plugins/application_swt/lib/application_swt/speedbar/combo_item.rb +55 -0
  114. data/plugins/application_swt/lib/application_swt/speedbar/label_item.rb +15 -0
  115. data/plugins/application_swt/lib/application_swt/speedbar/slider_item.rb +32 -0
  116. data/plugins/application_swt/lib/application_swt/speedbar/text_box_item.rb +36 -0
  117. data/plugins/application_swt/lib/application_swt/speedbar/toggle_item.rb +29 -0
  118. data/plugins/application_swt/lib/application_swt/tab.rb +84 -0
  119. data/plugins/application_swt/lib/application_swt/toolbar.rb +138 -0
  120. data/plugins/application_swt/lib/application_swt/toolbar/binding_translator.rb +94 -0
  121. data/plugins/application_swt/lib/application_swt/treebook.rb +78 -0
  122. data/plugins/application_swt/lib/application_swt/window.rb +419 -0
  123. data/plugins/application_swt/lib/dist/application_swt.jar +0 -0
  124. data/plugins/application_swt/lib/swt/graphics_utils.rb +193 -0
  125. data/plugins/application_swt/lib/swt/vtab_folder.rb +177 -0
  126. data/plugins/application_swt/lib/swt/vtab_item.rb +78 -0
  127. data/plugins/application_swt/lib/swt/vtab_label.rb +127 -0
  128. data/plugins/application_swt/plugin.rb +8 -0
  129. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +133 -0
  130. data/plugins/application_swt/spec/application_swt/menu/binding_translator_spec.rb +73 -0
  131. data/plugins/application_swt/spec/application_swt/menu_spec.rb +7 -0
  132. data/plugins/application_swt/spec/spec_helper.rb +20 -0
  133. data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
  134. data/plugins/auto_completer/features/auto_complete.feature +65 -0
  135. data/plugins/auto_completer/features/step_definitions/auto_complete_steps.rb +4 -0
  136. data/plugins/auto_completer/features/support/env.rb +2 -0
  137. data/plugins/auto_completer/lib/auto_completer.rb +129 -0
  138. data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
  139. data/plugins/auto_completer/lib/auto_completer/document_controller.rb +52 -0
  140. data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
  141. data/plugins/auto_completer/lib/auto_completer/word_iterator.rb +48 -0
  142. data/plugins/auto_completer/lib/auto_completer/word_list.rb +47 -0
  143. data/plugins/auto_completer/plugin.rb +10 -0
  144. data/plugins/auto_indenter/features/java_style_indentation.feature +36 -0
  145. data/plugins/auto_indenter/features/ruby_style_indentation.feature +42 -0
  146. data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +15 -0
  147. data/plugins/auto_indenter/features/support/env.rb +1 -0
  148. data/plugins/auto_indenter/lib/auto_indenter.rb +108 -0
  149. data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +100 -0
  150. data/plugins/auto_indenter/lib/auto_indenter/commands.rb +66 -0
  151. data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +103 -0
  152. data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
  153. data/plugins/auto_indenter/plugin.rb +9 -0
  154. data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
  155. data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
  156. data/plugins/auto_pairer/features/auto_pairer.feature +92 -0
  157. data/plugins/auto_pairer/features/step_definitions/auto_pairer_steps.rb +0 -0
  158. data/plugins/auto_pairer/features/support/env.rb +1 -0
  159. data/plugins/auto_pairer/lib/auto_pairer.rb +12 -0
  160. data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +168 -0
  161. data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +57 -0
  162. data/plugins/auto_pairer/plugin.rb +9 -0
  163. data/plugins/clipboard-viewer/Screenshot.png +0 -0
  164. data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
  165. data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
  166. data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
  167. data/plugins/clipboard-viewer/plugin.rb +9 -0
  168. data/plugins/clipboard-viewer/views/clipboard.html.erb +19 -0
  169. data/plugins/clipboard-viewer/views/default.css +43 -0
  170. data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
  171. data/plugins/comment/features/line_comment.feature +249 -0
  172. data/plugins/comment/features/selection_comment.feature +21 -0
  173. data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
  174. data/plugins/comment/lib/comment.rb +268 -0
  175. data/plugins/comment/plugin.rb +7 -0
  176. data/plugins/comment/vendor/comment_lib.json +47 -0
  177. data/plugins/connection_manager/lib/connection_manager.rb +57 -0
  178. data/plugins/connection_manager/lib/connection_manager/commands.rb +14 -0
  179. data/plugins/connection_manager/lib/connection_manager/connection_store.rb +87 -0
  180. data/plugins/connection_manager/lib/connection_manager/controller.rb +100 -0
  181. data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +38 -0
  182. data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +93 -0
  183. data/plugins/connection_manager/plugin.rb +12 -0
  184. data/plugins/connection_manager/views/index.html.erb +284 -0
  185. data/plugins/core/lib/core.rb +41 -0
  186. data/plugins/core/lib/core/controller.rb +23 -0
  187. data/plugins/core/lib/core/gui.rb +100 -0
  188. data/plugins/core/lib/core/has_spi.rb +10 -0
  189. data/plugins/core/lib/core/interface.rb +73 -0
  190. data/plugins/core/lib/core/model.rb +11 -0
  191. data/plugins/core/lib/core/observable.rb +115 -0
  192. data/plugins/core/lib/core/observable_struct.rb +34 -0
  193. data/plugins/core/lib/core/persistent_cache.rb +57 -0
  194. data/plugins/core/lib/core/plugin.rb +12 -0
  195. data/plugins/core/lib/core/plugin/storage.rb +133 -0
  196. data/plugins/core/lib/core/reentry_helpers.rb +13 -0
  197. data/plugins/core/lib/core/resource.rb +86 -0
  198. data/plugins/core/lib/core/task.rb +62 -0
  199. data/plugins/core/lib/core/task_queue.rb +72 -0
  200. data/plugins/core/plugin.rb +7 -0
  201. data/plugins/core/spec/core/base_storage_spec.rb +81 -0
  202. data/plugins/core/spec/core/gui_spec.rb +27 -0
  203. data/plugins/core/spec/core/observable_spec.rb +104 -0
  204. data/plugins/core/spec/core/persistent_cache_spec.rb +100 -0
  205. data/plugins/core/spec/core/resource_spec.rb +125 -0
  206. data/plugins/core/spec/core/shared_storage_spec.rb +49 -0
  207. data/plugins/core/spec/core/storage_spec.rb +27 -0
  208. data/plugins/core/spec/core/task_queue_spec.rb +199 -0
  209. data/plugins/core/spec/spec_helper.rb +27 -0
  210. data/plugins/declarations/lib/declarations.rb +159 -0
  211. data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
  212. data/plugins/declarations/lib/declarations/file.rb +68 -0
  213. data/plugins/declarations/lib/declarations/parser.rb +186 -0
  214. data/plugins/declarations/lib/declarations/select_tag_dialog.rb +45 -0
  215. data/plugins/declarations/plugin.rb +7 -0
  216. data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
  217. data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
  218. data/plugins/declarations/spec/spec_helper.rb +5 -0
  219. data/plugins/document_search/Readme.md +14 -0
  220. data/plugins/document_search/features/find.feature +541 -0
  221. data/plugins/document_search/features/incremental_search.feature +351 -0
  222. data/plugins/document_search/features/replace.feature +178 -0
  223. data/plugins/document_search/features/step_definitions/find_steps.rb +16 -0
  224. data/plugins/document_search/features/support/env.rb +14 -0
  225. data/plugins/document_search/lib/document_search.rb +191 -0
  226. data/plugins/document_search/lib/document_search/commands.rb +307 -0
  227. data/plugins/document_search/lib/document_search/find_speedbar.rb +162 -0
  228. data/plugins/document_search/lib/document_search/incremental_search_speedbar.rb +70 -0
  229. data/plugins/document_search/lib/document_search/query_options.rb +21 -0
  230. data/plugins/document_search/plugin.rb +8 -0
  231. data/plugins/edit_view/features/align_assignment.feature +106 -0
  232. data/plugins/edit_view/features/case_change.feature +67 -0
  233. data/plugins/edit_view/features/cursor_navigation.feature +36 -0
  234. data/plugins/edit_view/features/cut_and_paste.feature +45 -0
  235. data/plugins/edit_view/features/grammar.feature +11 -0
  236. data/plugins/edit_view/features/indentation_commands.feature +49 -0
  237. data/plugins/edit_view/features/line_delimiter.feature +47 -0
  238. data/plugins/edit_view/features/multiple_notebooks.feature +52 -0
  239. data/plugins/edit_view/features/multiple_windows.feature +48 -0
  240. data/plugins/edit_view/features/new_tab.feature +11 -0
  241. data/plugins/edit_view/features/soft_tabs.feature +243 -0
  242. data/plugins/edit_view/features/sort_lines.feature +15 -0
  243. data/plugins/edit_view/features/step_definitions/editing_steps.rb +350 -0
  244. data/plugins/edit_view/features/step_definitions/grammar_steps.rb +4 -0
  245. data/plugins/edit_view/features/step_definitions/key_steps.rb +48 -0
  246. data/plugins/edit_view/features/step_definitions/notebook_steps.rb +59 -0
  247. data/plugins/edit_view/features/step_definitions/tab_steps.rb +113 -0
  248. data/plugins/edit_view/features/step_definitions/window_steps.rb +86 -0
  249. data/plugins/edit_view/features/support/env.rb +59 -0
  250. data/plugins/edit_view/features/switch_tabs.feature +106 -0
  251. data/plugins/edit_view/features/tabs.feature +146 -0
  252. data/plugins/edit_view/features/undo_and_redo.feature +73 -0
  253. data/plugins/edit_view/features/word_matching.feature +67 -0
  254. data/plugins/edit_view/lib/edit_view.rb +659 -0
  255. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +170 -0
  256. data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
  257. data/plugins/edit_view/lib/edit_view/actions/deletion.rb +40 -0
  258. data/plugins/edit_view/lib/edit_view/actions/esc.rb +15 -0
  259. data/plugins/edit_view/lib/edit_view/actions/tab.rb +70 -0
  260. data/plugins/edit_view/lib/edit_view/command.rb +14 -0
  261. data/plugins/edit_view/lib/edit_view/commands/align_assignment_command.rb +55 -0
  262. data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +85 -0
  263. data/plugins/edit_view/lib/edit_view/document.rb +796 -0
  264. data/plugins/edit_view/lib/edit_view/document/command.rb +25 -0
  265. data/plugins/edit_view/lib/edit_view/document/controller.rb +43 -0
  266. data/plugins/edit_view/lib/edit_view/document/history.rb +41 -0
  267. data/plugins/edit_view/lib/edit_view/document/indentation.rb +40 -0
  268. data/plugins/edit_view/lib/edit_view/document/mirror.rb +42 -0
  269. data/plugins/edit_view/lib/edit_view/edit_tab.rb +59 -0
  270. data/plugins/edit_view/lib/edit_view/grammar.rb +58 -0
  271. data/plugins/edit_view/lib/edit_view/grammars/default.rb +10 -0
  272. data/plugins/edit_view/lib/edit_view/grammars/ruby.rb +10 -0
  273. data/plugins/edit_view/lib/edit_view/grammars/ruby_on_rails.rb +7 -0
  274. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +98 -0
  275. data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
  276. data/plugins/edit_view/lib/edit_view/select_font_dialog.rb +45 -0
  277. data/plugins/edit_view/lib/edit_view/select_theme_dialog.rb +42 -0
  278. data/plugins/edit_view/lib/edit_view/tab_settings.rb +135 -0
  279. data/plugins/edit_view/plugin.rb +9 -0
  280. data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
  281. data/plugins/edit_view/spec/edit_view/document_spec.rb +130 -0
  282. data/plugins/edit_view/spec/spec_helper.rb +5 -0
  283. data/plugins/edit_view_swt/lib/edit_view_swt.rb +621 -0
  284. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +224 -0
  285. data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +50 -0
  286. data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +68 -0
  287. data/plugins/edit_view_swt/plugin.rb +9 -0
  288. data/plugins/edit_view_swt/spec/edit_view_swt/word_movement_spec.rb +29 -0
  289. data/plugins/edit_view_swt/spec/spec_helper.rb +5 -0
  290. data/plugins/encryption/encryption.rb +52 -0
  291. data/plugins/encryption/ezcrypto.rb +652 -0
  292. data/plugins/encryption/jarmor-1.1.jar +0 -0
  293. data/plugins/encryption/plugin.rb +9 -0
  294. data/plugins/execute_current_tab/lib/execute_current_tab.rb +68 -0
  295. data/plugins/execute_current_tab/plugin.rb +8 -0
  296. data/plugins/help/lib/help.rb +64 -0
  297. data/plugins/help/lib/help/help_tab.rb +11 -0
  298. data/plugins/help/lib/help/view_controller.rb +30 -0
  299. data/plugins/help/plugin.rb +9 -0
  300. data/plugins/help/views/default.css +31 -0
  301. data/plugins/help/views/index.html.erb +41 -0
  302. data/plugins/help/views/redcar_small_icon.png +0 -0
  303. data/plugins/html_view/assets/blueprint/ie.css +35 -0
  304. data/plugins/html_view/assets/blueprint/print.css +29 -0
  305. data/plugins/html_view/assets/blueprint/screen.css +257 -0
  306. data/plugins/html_view/assets/blueprint/src/forms.css +65 -0
  307. data/plugins/html_view/assets/blueprint/src/grid.css +281 -0
  308. data/plugins/html_view/assets/blueprint/src/grid.png +0 -0
  309. data/plugins/html_view/assets/blueprint/src/ie.css +76 -0
  310. data/plugins/html_view/assets/blueprint/src/print.css +85 -0
  311. data/plugins/html_view/assets/blueprint/src/reset.css +38 -0
  312. data/plugins/html_view/assets/blueprint/src/typography.css +106 -0
  313. data/plugins/html_view/assets/jquery-1.4.min.js +151 -0
  314. data/plugins/html_view/assets/json2.js +476 -0
  315. data/plugins/html_view/assets/redcar.css +44 -0
  316. data/plugins/html_view/features/browser_bar.feature +47 -0
  317. data/plugins/html_view/features/fixtures/other.html +1 -0
  318. data/plugins/html_view/features/fixtures/sample.html +1 -0
  319. data/plugins/html_view/features/step_definitions/html_view_steps.rb +64 -0
  320. data/plugins/html_view/features/step_definitions/web_view_steps.rb +12 -0
  321. data/plugins/html_view/features/support/env.rb +27 -0
  322. data/plugins/html_view/features/web_preview.feature +21 -0
  323. data/plugins/html_view/lib/html_controller.rb +50 -0
  324. data/plugins/html_view/lib/html_view.rb +170 -0
  325. data/plugins/html_view/lib/html_view/browser_bar.rb +82 -0
  326. data/plugins/html_view/lib/html_view/commands.rb +64 -0
  327. data/plugins/html_view/lib/html_view/default_controller.rb +23 -0
  328. data/plugins/html_view/lib/html_view/html_tab.rb +40 -0
  329. data/plugins/html_view/plugin.rb +13 -0
  330. data/plugins/html_view/views/default.css +117 -0
  331. data/plugins/html_view/views/index.html.erb +5 -0
  332. data/plugins/html_view/views/watermark-48.png +0 -0
  333. data/plugins/java/features/fixtures/lib/classes.jar +0 -0
  334. data/plugins/java/features/fixtures/test.java +0 -0
  335. data/plugins/java/features/support/env.rb +27 -0
  336. data/plugins/java/features/syntax_check_java.feature +86 -0
  337. data/plugins/java/lib/syntax_check/java.rb +86 -0
  338. data/plugins/java/plugin.rb +7 -0
  339. data/plugins/key_bindings/lib/key_bindings.rb +34 -0
  340. data/plugins/key_bindings/plugin.rb +8 -0
  341. data/plugins/key_bindings/spec/spec_helper.rb +5 -0
  342. data/plugins/line_tools/features/clear_line.feature +25 -0
  343. data/plugins/line_tools/features/kill_line.feature +25 -0
  344. data/plugins/line_tools/features/lower_text.feature +54 -0
  345. data/plugins/line_tools/features/raise_text.feature +50 -0
  346. data/plugins/line_tools/features/replace_line.feature +33 -0
  347. data/plugins/line_tools/features/step_definitions/line_tools_steps.rb +23 -0
  348. data/plugins/line_tools/features/support/env.rb +0 -0
  349. data/plugins/line_tools/features/trim_line.feature +73 -0
  350. data/plugins/line_tools/lib/line_tools.rb +217 -0
  351. data/plugins/line_tools/plugin.rb +9 -0
  352. data/plugins/macros/features/block_selection_in_macros.feature +48 -0
  353. data/plugins/macros/features/predictive_macros.feature +79 -0
  354. data/plugins/macros/features/record_and_run_macro.feature +87 -0
  355. data/plugins/macros/features/step_definitions/macro_steps.rb +11 -0
  356. data/plugins/macros/features/step_definitions/prediction_steps.rb +8 -0
  357. data/plugins/macros/features/support/env.rb +0 -0
  358. data/plugins/macros/lib/macros.rb +167 -0
  359. data/plugins/macros/lib/macros/action_sequence.rb +30 -0
  360. data/plugins/macros/lib/macros/commands.rb +108 -0
  361. data/plugins/macros/lib/macros/macro.rb +37 -0
  362. data/plugins/macros/lib/macros/manager_controller.rb +67 -0
  363. data/plugins/macros/lib/macros/predictive/document_controller.rb +69 -0
  364. data/plugins/macros/lib/macros/predictive/sequence_finder.rb +112 -0
  365. data/plugins/macros/plugin.rb +9 -0
  366. data/plugins/macros/spec/macros/predictive/sequence_finder_spec.rb +142 -0
  367. data/plugins/macros/spec/spec_helper.rb +6 -0
  368. data/plugins/macros/views/macro_manager.html.erb +92 -0
  369. data/plugins/my_plugin/lib/my_plugin.rb +47 -0
  370. data/plugins/my_plugin/plugin.rb +8 -0
  371. data/plugins/open_default_app/lib/open_default_app.rb +61 -0
  372. data/plugins/open_default_app/plugin.rb +8 -0
  373. data/plugins/open_default_app/screenshot.png +0 -0
  374. data/plugins/outline_view/features/outline_view.feature +79 -0
  375. data/plugins/outline_view/features/step_definitions/outline_steps.rb +45 -0
  376. data/plugins/outline_view/lib/outline_view.rb +66 -0
  377. data/plugins/outline_view/lib/outline_view/commands.rb +13 -0
  378. data/plugins/outline_view/plugin.rb +10 -0
  379. data/plugins/outline_view/spec/fixtures/some_project/javascript.js +10 -0
  380. data/plugins/outline_view/spec/fixtures/some_project/nothing_to_see.rb +0 -0
  381. data/plugins/outline_view/spec/fixtures/some_project/one_lonely_class.rb +2 -0
  382. data/plugins/outline_view/spec/fixtures/some_project/similar_names.rb +18 -0
  383. data/plugins/outline_view/spec/fixtures/some_project/something_fancy.rb +736 -0
  384. data/plugins/outline_view/spec/fixtures/some_project/trailing_space.rb +5 -0
  385. data/plugins/outline_view_swt/lib/outline_view_swt.rb +79 -0
  386. data/plugins/outline_view_swt/plugin.rb +7 -0
  387. data/plugins/pair_highlighter/lib/pair_highlighter.rb +34 -0
  388. data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +185 -0
  389. data/plugins/pair_highlighter/plugin.rb +9 -0
  390. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +122 -0
  391. data/plugins/plugin_manager_ui/plugin.rb +13 -0
  392. data/plugins/plugin_manager_ui/views/index.html.erb +62 -0
  393. data/plugins/project/features/close_directory_tree.feature +28 -0
  394. data/plugins/project/features/find_file.feature +119 -0
  395. data/plugins/project/features/highlight_focussed_tab.feature +53 -0
  396. data/plugins/project/features/move_and_rename_files.feature +25 -0
  397. data/plugins/project/features/open_and_save_files.feature +85 -0
  398. data/plugins/project/features/open_directory_tree.feature +93 -0
  399. data/plugins/project/features/refresh_directory_tree.feature +44 -0
  400. data/plugins/project/features/step_definitions/directory_steps.rb +35 -0
  401. data/plugins/project/features/step_definitions/drb_steps.rb +40 -0
  402. data/plugins/project/features/step_definitions/file_steps.rb +66 -0
  403. data/plugins/project/features/step_definitions/find_file_steps.rb +7 -0
  404. data/plugins/project/features/step_definitions/project_tree_steps.rb +7 -0
  405. data/plugins/project/features/sub_project.feature +15 -0
  406. data/plugins/project/features/support/env.rb +35 -0
  407. data/plugins/project/features/watch_for_modified_files.feature +109 -0
  408. data/plugins/project/lib/project.rb +266 -0
  409. data/plugins/project/lib/project/adapters/local.rb +82 -0
  410. data/plugins/project/lib/project/adapters/remote.rb +96 -0
  411. data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +93 -0
  412. data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +94 -0
  413. data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +181 -0
  414. data/plugins/project/lib/project/commands.rb +449 -0
  415. data/plugins/project/lib/project/dir_controller.rb +275 -0
  416. data/plugins/project/lib/project/dir_mirror.rb +176 -0
  417. data/plugins/project/lib/project/drb_service.rb +86 -0
  418. data/plugins/project/lib/project/file_list.rb +164 -0
  419. data/plugins/project/lib/project/file_mirror.rb +85 -0
  420. data/plugins/project/lib/project/find_file_dialog.rb +118 -0
  421. data/plugins/project/lib/project/find_recent_dialog.rb +30 -0
  422. data/plugins/project/lib/project/manager.rb +545 -0
  423. data/plugins/project/lib/project/project_tree_controller.rb +24 -0
  424. data/plugins/project/lib/project/recent.rb +64 -0
  425. data/plugins/project/lib/project/sub_project.rb +17 -0
  426. data/plugins/project/lib/project/support/recycle.js +2 -0
  427. data/plugins/project/lib/project/support/trash.rb +73 -0
  428. data/plugins/project/plugin.rb +11 -0
  429. data/plugins/project/spec/fixture_helper.rb +30 -0
  430. data/plugins/project/spec/project/adapters/remote_protocols/ftp_spec.rb +75 -0
  431. data/plugins/project/spec/project/adapters/remote_protocols/sftp_spec.rb +121 -0
  432. data/plugins/project/spec/project/adapters/remote_spec.rb +136 -0
  433. data/plugins/project/spec/project/dir_mirror_spec.rb +65 -0
  434. data/plugins/project/spec/project/file_list_spec.rb +151 -0
  435. data/plugins/project/spec/project/file_mirror_spec.rb +97 -0
  436. data/plugins/project/spec/spec_helper.rb +26 -0
  437. data/plugins/project/views/bulk_rename.html.erb +162 -0
  438. data/plugins/project_search/features/support/env.rb +6 -0
  439. data/plugins/project_search/features/word_search.feature +34 -0
  440. data/plugins/project_search/lib/project_search.rb +82 -0
  441. data/plugins/project_search/lib/project_search/binary_data_detector.rb +46 -0
  442. data/plugins/project_search/lib/project_search/commands.rb +50 -0
  443. data/plugins/project_search/lib/project_search/hit.rb +21 -0
  444. data/plugins/project_search/lib/project_search/images/spinner.gif +0 -0
  445. data/plugins/project_search/lib/project_search/lucene_index.rb +81 -0
  446. data/plugins/project_search/lib/project_search/lucene_refresh.rb +22 -0
  447. data/plugins/project_search/lib/project_search/project.rb +14 -0
  448. data/plugins/project_search/lib/project_search/query.rb +29 -0
  449. data/plugins/project_search/lib/project_search/stylesheets/style.css +279 -0
  450. data/plugins/project_search/lib/project_search/views/_file.html.erb +58 -0
  451. data/plugins/project_search/lib/project_search/views/index.html.erb +156 -0
  452. data/plugins/project_search/lib/project_search/word_search.rb +143 -0
  453. data/plugins/project_search/lib/project_search/word_search_controller.rb +219 -0
  454. data/plugins/project_search/plugin.rb +8 -0
  455. data/plugins/project_search/spec/fixtures/project/binary_file.bin +0 -0
  456. data/plugins/project_search/spec/fixtures/project/foo.txt +43 -0
  457. data/plugins/project_search/spec/fixtures/project/qux.rb +3 -0
  458. data/plugins/project_search/spec/project_search/binary_data_detector_spec.rb +24 -0
  459. data/plugins/project_search/spec/project_search/word_search_spec.rb +157 -0
  460. data/plugins/project_search/spec/spec_helper.rb +27 -0
  461. data/plugins/redcar/features/alter_font_size.feature +26 -0
  462. data/plugins/redcar/features/goto_line_command.feature +20 -0
  463. data/plugins/redcar/features/step_definitions/env.rb +5 -0
  464. data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
  465. data/plugins/redcar/features/text_editing.feature +34 -0
  466. data/plugins/redcar/features/text_navigation.feature +30 -0
  467. data/plugins/redcar/plugin.rb +17 -0
  468. data/plugins/redcar/redcar.rb +1097 -0
  469. data/plugins/redcar_debug/lib/redcar_debug.rb +91 -0
  470. data/plugins/redcar_debug/plugin.rb +8 -0
  471. data/plugins/redcar_debug/views/history.html.erb +34 -0
  472. data/plugins/redcar_debug/views/index.html.erb +36 -0
  473. data/plugins/repl/features/command_editing.feature +55 -0
  474. data/plugins/repl/features/command_history.feature +75 -0
  475. data/plugins/repl/features/step_definitions/repl_steps.rb +19 -0
  476. data/plugins/repl/features/support/env.rb +24 -0
  477. data/plugins/repl/features/support/fake_repl.rb +16 -0
  478. data/plugins/repl/lib/repl.rb +40 -0
  479. data/plugins/repl/lib/repl/repl_command.rb +20 -0
  480. data/plugins/repl/lib/repl/repl_mirror.rb +255 -0
  481. data/plugins/repl/lib/repl/repl_tab.rb +154 -0
  482. data/plugins/repl/plugin.rb +8 -0
  483. data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
  484. data/plugins/repl/spec/spec_helper.rb +5 -0
  485. data/plugins/repl_swt/lib/repl_swt.rb +7 -0
  486. data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
  487. data/plugins/repl_swt/plugin.rb +8 -0
  488. data/plugins/ruby/features/fixtures/test.rb +0 -0
  489. data/plugins/ruby/features/support/env.rb +4 -0
  490. data/plugins/ruby/features/syntax_check_ruby.feature +26 -0
  491. data/plugins/ruby/lib/ruby.rb +35 -0
  492. data/plugins/ruby/lib/ruby/repl_mirror.rb +46 -0
  493. data/plugins/ruby/lib/ruby/syntax_checker.rb +30 -0
  494. data/plugins/ruby/plugin.rb +8 -0
  495. data/plugins/ruby/spec/ruby/repl_mirror_spec.rb +202 -0
  496. data/plugins/ruby/spec/spec_helper.rb +5 -0
  497. data/plugins/runnables/features/command_tree.feature +63 -0
  498. data/plugins/runnables/features/file_runner_input.feature +21 -0
  499. data/plugins/runnables/features/parameter_input.feature +43 -0
  500. data/plugins/runnables/features/run_alternate_command.feature +15 -0
  501. data/plugins/runnables/features/run_command_tab.feature +47 -0
  502. data/plugins/runnables/features/step_definitions/runnable_steps.rb +28 -0
  503. data/plugins/runnables/features/support/env.rb +124 -0
  504. data/plugins/runnables/lib/runnables.rb +180 -0
  505. data/plugins/runnables/lib/runnables/command_output_controller.rb +183 -0
  506. data/plugins/runnables/lib/runnables/commands.rb +82 -0
  507. data/plugins/runnables/lib/runnables/output_processor.rb +74 -0
  508. data/plugins/runnables/lib/runnables/running_process_checker.rb +34 -0
  509. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable.rb +62 -0
  510. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +45 -0
  511. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +30 -0
  512. data/plugins/runnables/lib/runnables/tree_mirror/tree_controller.rb +36 -0
  513. data/plugins/runnables/lib/runnables/tree_mirror/tree_mirror.rb +66 -0
  514. data/plugins/runnables/plugin.rb +9 -0
  515. data/plugins/runnables/spec/runnables/output_processor_spec.rb +57 -0
  516. data/plugins/runnables/spec/spec_helper.rb +5 -0
  517. data/plugins/runnables/views/basic_ansi.css +34 -0
  518. data/plugins/runnables/views/color_tester.html +50 -0
  519. data/plugins/runnables/views/command_output.html.erb +32 -0
  520. data/plugins/runnables/views/default.css +79 -0
  521. data/plugins/runnables/views/indicator.gif +0 -0
  522. data/plugins/runnables/views/redcar_small_icon.png +0 -0
  523. data/plugins/runnables/views/reset.css +53 -0
  524. data/plugins/runnables/views/running_test.html +41 -0
  525. data/plugins/runnables/views/wedgeDown.png +0 -0
  526. data/plugins/runnables/views/wedgeRight.png +0 -0
  527. data/plugins/scm/lib/scm.rb +296 -0
  528. data/plugins/scm/lib/scm/commands.rb +48 -0
  529. data/plugins/scm/lib/scm/commit_mirror.rb +72 -0
  530. data/plugins/scm/lib/scm/diff_mirror.rb +31 -0
  531. data/plugins/scm/lib/scm/errors.rb +8 -0
  532. data/plugins/scm/lib/scm/model.rb +275 -0
  533. data/plugins/scm/lib/scm/scm_changes_controller.rb +107 -0
  534. data/plugins/scm/lib/scm/scm_changes_mirror.rb +51 -0
  535. data/plugins/scm/lib/scm/scm_changes_mirror/change.rb +63 -0
  536. data/plugins/scm/lib/scm/scm_changes_mirror/changes_node.rb +47 -0
  537. data/plugins/scm/lib/scm/scm_changes_mirror/drag_controller.rb +78 -0
  538. data/plugins/scm/lib/scm/scm_commits_controller.rb +49 -0
  539. data/plugins/scm/lib/scm/scm_commits_mirror.rb +36 -0
  540. data/plugins/scm/lib/scm/scm_commits_mirror/commit.rb +26 -0
  541. data/plugins/scm/lib/scm/scm_commits_mirror/commits_node.rb +38 -0
  542. data/plugins/scm/plugin.rb +8 -0
  543. data/plugins/scm/spec/spec_helper.rb +5 -0
  544. data/plugins/scm_git/lib/scm_git.rb +543 -0
  545. data/plugins/scm_git/lib/scm_git/change.rb +137 -0
  546. data/plugins/scm_git/lib/scm_git/commit.rb +18 -0
  547. data/plugins/scm_git/lib/scm_git/config_file.rb +31 -0
  548. data/plugins/scm_git/plugin.rb +7 -0
  549. data/plugins/scm_hg/lib/scm_hg.rb +30 -0
  550. data/plugins/scm_hg/plugin.rb +7 -0
  551. data/plugins/scm_svn/LICENSE +48 -0
  552. data/plugins/scm_svn/features/add_and_commit.feature +18 -0
  553. data/plugins/scm_svn/features/checkout.feature +5 -0
  554. data/plugins/scm_svn/features/edit_and_index.feature +12 -0
  555. data/plugins/scm_svn/features/ignore_files.feature +14 -0
  556. data/plugins/scm_svn/features/merge.feature +34 -0
  557. data/plugins/scm_svn/features/resolve_conflict.feature +23 -0
  558. data/plugins/scm_svn/features/revert_and_delete.feature +21 -0
  559. data/plugins/scm_svn/features/step_definitions/branch_and_merge_steps.rb +27 -0
  560. data/plugins/scm_svn/features/step_definitions/checkout_steps.rb +25 -0
  561. data/plugins/scm_svn/features/step_definitions/edit_and_index_steps.rb +50 -0
  562. data/plugins/scm_svn/features/step_definitions/scm_svn_steps.rb +57 -0
  563. data/plugins/scm_svn/features/support/env.rb +71 -0
  564. data/plugins/scm_svn/features/switch_branches.feature +53 -0
  565. data/plugins/scm_svn/features/update.feature +16 -0
  566. data/plugins/scm_svn/lib/scm_svn.rb +445 -0
  567. data/plugins/scm_svn/lib/scm_svn/change.rb +116 -0
  568. data/plugins/scm_svn/plugin.rb +7 -0
  569. data/plugins/snippets/features/snippet_indenting.feature +87 -0
  570. data/plugins/snippets/features/snippets.feature +398 -0
  571. data/plugins/snippets/features/step_definitions/snippet_steps.rb +16 -0
  572. data/plugins/snippets/features/support/env.rb +1 -0
  573. data/plugins/snippets/lib/snippets.rb +111 -0
  574. data/plugins/snippets/lib/snippets/document_controller.rb +591 -0
  575. data/plugins/snippets/lib/snippets/explorer.rb +48 -0
  576. data/plugins/snippets/lib/snippets/tab_handler.rb +117 -0
  577. data/plugins/snippets/plugin.rb +9 -0
  578. data/plugins/splash_screen/plugin.rb +8 -0
  579. data/plugins/splash_screen/splash_screen.rb +62 -0
  580. data/plugins/strip_trailing_spaces/features/fixtures/test.txt +3 -0
  581. data/plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature +34 -0
  582. data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +60 -0
  583. data/plugins/strip_trailing_spaces/plugin.rb +8 -0
  584. data/plugins/syntax_check/README +6 -0
  585. data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +11 -0
  586. data/plugins/syntax_check/features/support/env.rb +3 -0
  587. data/plugins/syntax_check/lib/syntax_check.rb +100 -0
  588. data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
  589. data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
  590. data/plugins/syntax_check/lib/syntax_check/error.rb +24 -0
  591. data/plugins/syntax_check/plugin.rb +7 -0
  592. data/plugins/task_manager/lib/task_manager.rb +30 -0
  593. data/plugins/task_manager/plugin.rb +11 -0
  594. data/plugins/task_manager/views/index.html.erb +70 -0
  595. data/plugins/test_runner/lib/test_runner.rb +40 -0
  596. data/plugins/test_runner/lib/test_runner/jasmine_test_runner.rb +15 -0
  597. data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
  598. data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
  599. data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +42 -0
  600. data/plugins/test_runner/plugin.rb +8 -0
  601. data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
  602. data/plugins/test_runner/spec/spec_helper.rb +5 -0
  603. data/plugins/textmate/features/bundle_tree.feature +23 -0
  604. data/plugins/textmate/features/step_definitions/tree_steps.rb +57 -0
  605. data/plugins/textmate/features/support/env.rb +19 -0
  606. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If.tmSnippet +18 -0
  607. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If__Else.tmSnippet +20 -0
  608. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Include.tmSnippet +16 -0
  609. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Loop.tmSnippet +18 -0
  610. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Unless.tmSnippet +18 -0
  611. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Var.tmSnippet +16 -0
  612. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/next_If__Else.tmSnippet +20 -0
  613. data/plugins/textmate/features/support/test_bundle.tmbundle/info.plist +26 -0
  614. data/plugins/textmate/lib/textmate.rb +202 -0
  615. data/plugins/textmate/lib/textmate/bundle.rb +100 -0
  616. data/plugins/textmate/lib/textmate/commands.rb +79 -0
  617. data/plugins/textmate/lib/textmate/environment.rb +76 -0
  618. data/plugins/textmate/lib/textmate/plist.rb +80 -0
  619. data/plugins/textmate/lib/textmate/preference.rb +125 -0
  620. data/plugins/textmate/lib/textmate/snippet.rb +47 -0
  621. data/plugins/textmate/lib/textmate/tree_mirror.rb +206 -0
  622. data/plugins/textmate/plugin.rb +8 -0
  623. data/plugins/textmate/views/installed_bundles.html.erb +24 -0
  624. data/plugins/todo_list/README.md +22 -0
  625. data/plugins/todo_list/features/support/env.rb +8 -0
  626. data/plugins/todo_list/features/todo_list.feature +26 -0
  627. data/plugins/todo_list/lib/todo_list.rb +49 -0
  628. data/plugins/todo_list/lib/todo_list/file_parser.rb +58 -0
  629. data/plugins/todo_list/lib/todo_list/todo_controller.rb +99 -0
  630. data/plugins/todo_list/plugin.rb +11 -0
  631. data/plugins/todo_list/spec/fixtures/project/FIXME.file +3 -0
  632. data/plugins/todo_list/spec/fixtures/project/NOTE.ignored.file +1 -0
  633. data/plugins/todo_list/spec/fixtures/project/OPTIMIZE_colon.file +1 -0
  634. data/plugins/todo_list/spec/fixtures/project/XXX.ignored +1 -0
  635. data/plugins/todo_list/spec/fixtures/project/ignored_directory/TODO.file +2 -0
  636. data/plugins/todo_list/spec/fixtures/settings.rb +11 -0
  637. data/plugins/todo_list/spec/spec_helper.rb +6 -0
  638. data/plugins/todo_list/spec/todo_list/file_parser_spec.rb +35 -0
  639. data/plugins/todo_list/views/default.css +15 -0
  640. data/plugins/todo_list/views/index.html.erb +19 -0
  641. data/plugins/todo_list/views/redcar_small_icon.png +0 -0
  642. data/plugins/tree_view_swt/lib/tree_view_swt.rb +496 -0
  643. data/plugins/tree_view_swt/plugin.rb +9 -0
  644. data/plugins/web_bookmarks/Screenshot.png +0 -0
  645. data/plugins/web_bookmarks/features/bookmark.feature +37 -0
  646. data/plugins/web_bookmarks/features/fixtures/other.html +1 -0
  647. data/plugins/web_bookmarks/features/fixtures/sample.html +1 -0
  648. data/plugins/web_bookmarks/features/step_definitions/web_steps.rb +4 -0
  649. data/plugins/web_bookmarks/features/support/env.rb +26 -0
  650. data/plugins/web_bookmarks/lib/web_bookmarks.rb +49 -0
  651. data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +52 -0
  652. data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +65 -0
  653. data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +74 -0
  654. data/plugins/web_bookmarks/plugin.rb +10 -0
  655. metadata +937 -0
@@ -0,0 +1,127 @@
1
+ require File.expand_path("../graphics_utils", __FILE__)
2
+
3
+ module Swt
4
+ module Widgets
5
+ class VTabLabel
6
+ attr_reader :active, :title, :show_close
7
+ attr_accessor :font
8
+
9
+ include Swt::Events::MouseListener
10
+ include Swt::Events::MouseTrackListener
11
+
12
+ ICON_PADDING = 3
13
+
14
+ def close_icon
15
+ @@close_icon ||= Redcar::ApplicationSWT::Icon.swt_image(:close)
16
+ end
17
+
18
+ def initialize(tab, parent, style)
19
+ @label = Swt::Widgets::Label.new(parent, style)
20
+ @active = false
21
+ @tab = tab
22
+ @parent = parent
23
+ @title = ""
24
+ @icon = nil
25
+ @show_close = false
26
+
27
+ @label.image = label_image
28
+ @label.add_paint_listener { |event| event.gc.draw_image(label_image, 0, 0) }
29
+ @label.add_mouse_listener(self)
30
+ self.show_close = true
31
+ end
32
+
33
+ def label_image
34
+ display = Swt::Widgets::Display.current
35
+ unless @img
36
+ @img = GraphicsUtils.create_rotated_text(@title, @font, @parent.foreground, @parent.background, Swt::SWT::UP) do |gc, extent|
37
+ fg, bg = gc.foreground, gc.background
38
+ if @active
39
+ options = @tab.selection_color_options
40
+ options[:percents].each_with_index do |p, idx|
41
+ gc.foreground = options[:colors][idx]
42
+ gc.background = options[:colors][idx + 1]
43
+ if options[:vertical]
44
+ h = idx > 0 ? extent.height * options[:percents][idx - 1] : 0
45
+ gc.fill_gradient_rectangle(0, h, extent.width, extent.height * p, true)
46
+ else
47
+ w = idx > 0 ? extent.width * options[:percents][idx - 1] : 0
48
+ gc.fill_gradient_rectangle(w, 0, extent.width * p, extent.height, false)
49
+ end
50
+ end
51
+ else
52
+ gc.fill_rectangle(0, 0, extent.width, extent.height)
53
+ end
54
+ gc.foreground = display.get_system_color(Swt::SWT::COLOR_WIDGET_NORMAL_SHADOW)
55
+ gc.draw_rectangle(0, 0, extent.width - 1, extent.height - 1)
56
+ gc.foreground, gc.background = fg, bg
57
+ end
58
+ overlay_icon(@icon, @img)
59
+ end
60
+ @img
61
+ end
62
+
63
+ def overlay_icon(icon, image)
64
+ return unless icon
65
+ gc = GraphicsUtils::GC.new(image)
66
+ gc.draw_image(@icon, ICON_PADDING, ICON_PADDING)
67
+ gc.dispose
68
+ end
69
+
70
+ def dirty!
71
+ @img = nil
72
+ end
73
+
74
+ def activate
75
+ @tab.activate
76
+ end
77
+
78
+ def active= boolean
79
+ @active = boolean
80
+ redraw
81
+ end
82
+
83
+ def title= (str)
84
+ @title = str
85
+ redraw
86
+ end
87
+
88
+ def redraw
89
+ dirty!
90
+ @label.image = label_image
91
+ end
92
+
93
+ def dispose
94
+ @label.dispose
95
+ end
96
+
97
+ def show_close= boolean
98
+ return if @show_close == boolean
99
+ @show_close = boolean
100
+ @show_close ? @label.add_mouse_track_listener(self) : @label.remove_mouse_track_listener(self)
101
+ end
102
+
103
+ def mouseUp(e)
104
+ if show_close and close_icon.bounds.contains(e.x - ICON_PADDING, e.y - ICON_PADDING)
105
+ @tab.parent.remove_item(@tab)
106
+ else
107
+ activate if e.button == 1
108
+ end
109
+ end
110
+
111
+ def mouseEnter(e)
112
+ @icon = close_icon
113
+ redraw
114
+ end
115
+
116
+ def mouseExit(e)
117
+ @icon = nil
118
+ redraw
119
+ end
120
+
121
+ # Unused
122
+ def mouseDown(e); end
123
+ def mouseDoubleClick(e); end
124
+ def mouseHover(e); end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,8 @@
1
+
2
+ Plugin.define do
3
+ name "application_swt"
4
+ version "1.1"
5
+ file "lib", "application_swt"
6
+ object "Redcar::ApplicationSWT"
7
+ dependencies "application", ">0"
8
+ end
@@ -0,0 +1,133 @@
1
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+
3
+ describe Redcar::ApplicationSWT::Gradient do
4
+
5
+ color_position_hash = {100 => "#000000", 0 => "#FFFFFF", 50 => "#999999"}
6
+ subject { Redcar::ApplicationSWT::Gradient.new(color_position_hash) }
7
+
8
+ it "should output its contents as a hash" do
9
+ subject.to_hash.should == color_position_hash
10
+ end
11
+
12
+ describe "swt_stops" do
13
+
14
+ it "not include the implied zero stop" do
15
+ subject.swt_stops.should_not include(0)
16
+ end
17
+
18
+ it "should include nonzero stops from the input" do
19
+ subject.swt_stops.to_a.should == [50, 100]
20
+ end
21
+
22
+ it "should be in increasing order" do
23
+ subject.swt_stops.sort.should == subject.swt_stops.to_a
24
+ end
25
+
26
+ end
27
+
28
+ describe "swt_colors" do
29
+
30
+ it "should be Swt::Color versions of the gradient colors in increasing order by stop position" do
31
+ subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
32
+ subject.swt_colors[1].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 153, 153, 153)
33
+ subject.swt_colors[2].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 0, 0, 0)
34
+ end
35
+
36
+ end
37
+
38
+ context "when constructed with an implied 0-position stop" do
39
+
40
+ subject { Redcar::ApplicationSWT::Gradient.new( 50 => "#000000", 100 => "#FFFFFF" ) }
41
+
42
+ describe "swt_stops" do
43
+
44
+ it "should have the first color position as its first element" do
45
+ subject.swt_stops.first.should == 50
46
+ end
47
+
48
+ end
49
+
50
+ describe "swt_colors" do
51
+
52
+ it "should have the gradient's first color as its first two elements" do
53
+ first_color = Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 0, 0, 0)
54
+ subject.swt_colors[0].should == first_color
55
+ subject.swt_colors[1].should == first_color
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+
62
+ context "when constructed with an implied 100-position stop" do
63
+
64
+ subject { Redcar::ApplicationSWT::Gradient.new( 0 => "#000000", 50 => "#FFFFFF" ) }
65
+
66
+ describe "swt_stops" do
67
+
68
+ it "should include a stop at position 100" do
69
+ subject.swt_stops.should include(100)
70
+ end
71
+
72
+ end
73
+
74
+ describe "swt_colors" do
75
+
76
+ it "should have the gradient's last color as its last two elements" do
77
+ last_color = Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
78
+ subject.swt_colors[1].should == last_color
79
+ subject.swt_colors[2].should == last_color
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ context "when constructed with stop position below 0" do
87
+
88
+ it "should raise an ArgumentError" do
89
+ expect{ Redcar::ApplicationSWT::Gradient.new( -999 => "#FFFFFF") }.should raise_error(ArgumentError)
90
+ end
91
+
92
+ end
93
+
94
+ context "when constructed with stop position above 100" do
95
+
96
+ it "should raise an ArgumentError" do
97
+ expect{ Redcar::ApplicationSWT::Gradient.new( 999 => "#FFFFFF") }.should raise_error(ArgumentError)
98
+ end
99
+
100
+ end
101
+
102
+ context "when constructed with three-character hex strings for colors" do
103
+
104
+ subject { Redcar::ApplicationSWT::Gradient.new( 50 => "#F0F" ) }
105
+
106
+ it "should process the colors correctly" do
107
+ subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 0, 255)
108
+ end
109
+
110
+ end
111
+
112
+ context "when constructed with a single color instead of a gradient" do
113
+
114
+ subject { Redcar::ApplicationSWT::Gradient.new( "#FFFFFF" ) }
115
+
116
+ it "it should construct a gradient with that color" do
117
+ subject.swt_colors[0].should == Swt::Graphics::Color.new(Redcar::ApplicationSWT.display, 255, 255, 255)
118
+ end
119
+
120
+ end
121
+
122
+ context "when constructed with a color name" do
123
+
124
+ subject { Redcar::ApplicationSWT::Gradient.new( "black" ) }
125
+
126
+ it "should return the SWT system color corresponding to that name" do
127
+ Redcar::ApplicationSWT.instance_variable_set("@display", Swt::Widgets::Display.current) if Redcar::ApplicationSWT.display.nil?
128
+ subject.swt_colors[0].should == Redcar::ApplicationSWT.display.get_system_color(Swt::SWT::COLOR_BLACK)
129
+ end
130
+
131
+ end
132
+ end
133
+
@@ -0,0 +1,73 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ BindingTranslator = Redcar::ApplicationSWT::Menu::BindingTranslator
4
+ describe BindingTranslator do
5
+ def check(key, value)
6
+ BindingTranslator.key(key).should == value
7
+ end
8
+
9
+ describe "single modifiers" do
10
+ it "translates Shift+letter" do
11
+ check("Shift+N", Swt::SWT::SHIFT + 'N'[0])
12
+ check("Shift+K", Swt::SWT::SHIFT + 'K'[0])
13
+ check("Shift+P", Swt::SWT::SHIFT + 'P'[0])
14
+ end
15
+
16
+ it "translates Ctrl+letter" do
17
+ check("Ctrl+T", Swt::SWT::CTRL + 'T'[0])
18
+ check("Ctrl+2", Swt::SWT::CTRL + '2'[0])
19
+ end
20
+
21
+ it "translates Alt+letter" do
22
+ check("Alt+B", Swt::SWT::ALT + 'B'[0])
23
+ end
24
+
25
+ it "translates Cmd+letter" do
26
+ check("Cmd+X", Swt::SWT::COMMAND + 'X'[0])
27
+ end
28
+
29
+ it "translates F keys" do
30
+ check("F3", Swt::SWT::F3)
31
+ check("F4", Swt::SWT::F4)
32
+ end
33
+
34
+ it "translates arrow keys" do
35
+ check("Right", Swt::SWT::ARROW_RIGHT)
36
+ check("Left", Swt::SWT::ARROW_LEFT)
37
+ check("Up", Swt::SWT::ARROW_UP)
38
+ check("Down", Swt::SWT::ARROW_DOWN)
39
+ end
40
+
41
+ it "translates tab" do
42
+ check("Tab", Swt::SWT::TAB)
43
+ end
44
+
45
+ it "translates home" do
46
+ check("Home", Swt::SWT::HOME)
47
+ check("Alt+Home", Swt::SWT::ALT + Swt::SWT::HOME)
48
+ check("Shift+Home", Swt::SWT::SHIFT + Swt::SWT::HOME)
49
+ end
50
+
51
+ it "translates end" do
52
+ check("End", Swt::SWT::END)
53
+ check("Ctrl+End", Swt::SWT::CTRL + Swt::SWT::END)
54
+ check("Cmd+End", Swt::SWT::COMMAND + Swt::SWT::END)
55
+ end
56
+ end
57
+
58
+ describe "multiple modifiers" do
59
+ it "translates Mod+Mod+letter" do
60
+ check("Ctrl+Alt+W", Swt::SWT::CTRL + Swt::SWT::ALT + 'W'[0])
61
+ check("Cmd+Alt+W", Swt::SWT::COMMAND + Swt::SWT::ALT + 'W'[0])
62
+ check("Cmd+Shift+W", Swt::SWT::COMMAND + Swt::SWT::SHIFT + 'W'[0])
63
+ check("Alt+Shift+W", Swt::SWT::ALT + Swt::SWT::SHIFT + 'W'[0])
64
+ end
65
+
66
+ it "translates Mod+Mod+Mod+letter" do
67
+ check("Shift+Ctrl+Alt+W", Swt::SWT::SHIFT + Swt::SWT::CTRL + Swt::SWT::ALT + 'W'[0])
68
+ check("Shift+Cmd+Alt+W", Swt::SWT::SHIFT + Swt::SWT::COMMAND + Swt::SWT::ALT + 'W'[0])
69
+ check("Alt+Cmd+Shift+W", Swt::SWT::ALT + Swt::SWT::COMMAND + Swt::SWT::SHIFT + 'W'[0])
70
+ check("Cmd+Alt+Shift+W", Swt::SWT::COMMAND + Swt::SWT::ALT + Swt::SWT::SHIFT + 'W'[0])
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+
3
+ describe Redcar::ApplicationSWT::Menu do
4
+ it "should" do
5
+ (1 + 1).should == 2
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ $:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'redcar'
4
+ Redcar.environment = :test
5
+ Redcar.load_unthreaded
6
+
7
+ Spec::Runner.configure do |config|
8
+ config.before(:suite) do
9
+ end
10
+
11
+ config.before(:each) do
12
+ end
13
+
14
+ config.after(:each) do
15
+ end
16
+
17
+ config.after(:suite) do
18
+ end
19
+ end
20
+
@@ -0,0 +1,313 @@
1
+
2
+ package com.redcareditor.application_swt;
3
+
4
+ import java.lang.reflect.InvocationTargetException;
5
+ import java.lang.reflect.Method;
6
+
7
+ import org.eclipse.swt.SWT;
8
+ import org.eclipse.swt.internal.C;
9
+ import org.eclipse.swt.internal.Callback;
10
+ import org.eclipse.swt.widgets.Display;
11
+ import org.eclipse.swt.widgets.Listener;
12
+
13
+ /**
14
+ * Provide a hook to connecting the Preferences, About and Quit menu items of the Mac OS X
15
+ * Application menu when using the SWT Cocoa bindings.
16
+ * <p>
17
+ * This code does not require the Cocoa SWT JAR in order to be compiled as it uses reflection to
18
+ * access the Cocoa specific API methods. It does, however, depend on JFace (for IAction), but you
19
+ * could easily modify the code to use SWT Listeners instead in order to use this class in SWT only
20
+ * applications.
21
+ * </p>
22
+ * <p>
23
+ * This code was influenced by the <a
24
+ * href="http://www.simidude.com/blog/2008/macify-a-swt-application-in-a-cross-platform-way/"
25
+ * >CarbonUIEnhancer from Agynami</a> with the implementation being modified from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java"
26
+ * >org.eclipse.ui.internal.cocoa.CocoaUIEnhancer</a>.
27
+ * </p>
28
+ * <p>
29
+ * This class works with both the 32-bit and 64-bit versions of the SWT Cocoa bindings.
30
+ * <p>
31
+ * <p>
32
+ * This class is released under the Eclipse Public License (<a href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>).
33
+ */
34
+ public class CocoaUIEnhancer {
35
+
36
+ private static final long kAboutMenuItem = 0;
37
+ private static final long kPreferencesMenuItem = 2;
38
+ // private static final long kServicesMenuItem = 4;
39
+ // private static final long kHideApplicationMenuItem = 6;
40
+ private static final long kQuitMenuItem = 10;
41
+
42
+ static long sel_toolbarButtonClicked_;
43
+ static long sel_preferencesMenuItemSelected_;
44
+ static long sel_aboutMenuItemSelected_;
45
+ static Callback proc3Args;
46
+
47
+ final private String appName;
48
+
49
+ /**
50
+ * Class invoked via the Callback object to run the about and preferences actions.
51
+ * <p>
52
+ * If you don't use JFace in your application (SWT only), change the
53
+ * {@link org.eclipse.jface.action.IAction}s to {@link org.eclipse.swt.widgets.Listener}s.
54
+ * </p>
55
+ */
56
+ private static class MenuHookObject {
57
+ final Listener about;
58
+ final Listener pref;
59
+
60
+ public MenuHookObject( Listener about, Listener pref ) {
61
+ this.about = about;
62
+ this.pref = pref;
63
+ }
64
+
65
+ /**
66
+ * Will be called on 32bit SWT.
67
+ */
68
+ @SuppressWarnings( "unused" )
69
+ public int actionProc( int id, int sel, int arg0 ) {
70
+ return (int) actionProc( (long) id, (long) sel, (long) arg0 );
71
+ }
72
+
73
+ /**
74
+ * Will be called on 64bit SWT.
75
+ */
76
+ public long actionProc( long id, long sel, long arg0 ) {
77
+ if ( sel == sel_aboutMenuItemSelected_ ) {
78
+ about.handleEvent(null);
79
+ } else if ( sel == sel_preferencesMenuItemSelected_ ) {
80
+ pref.handleEvent(null);
81
+ } else {
82
+ // Unknown selection!
83
+ }
84
+ // Return value is not used.
85
+ return 99;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Construct a new CocoaUIEnhancer.
91
+ *
92
+ * @param appName
93
+ * The name of the application. It will be used to customize the About and Quit menu
94
+ * items. If you do not wish to customize the About and Quit menu items, just pass
95
+ * <tt>null</tt> here.
96
+ */
97
+ public CocoaUIEnhancer( String appName ) {
98
+ this.appName = appName;
99
+ }
100
+
101
+ /**
102
+ * Hook the given Listener to the Mac OS X application Quit menu and the IActions to the About
103
+ * and Preferences menus.
104
+ *
105
+ * @param display
106
+ * The Display to use.
107
+ * @param quitListener
108
+ * The listener to invoke when the Quit menu is invoked.
109
+ * @param aboutListener
110
+ * The listener to invoke when the About menu is invoked.
111
+ * @param preferencesListener
112
+ * The listener to invoke when the Preferences menu is invoked.
113
+ */
114
+ public void hookApplicationMenu( Display display, Listener quitListener, Listener aboutListener,
115
+ Listener preferencesListener ) {
116
+ // This is our callbackObject whose 'actionProc' method will be called when the About or
117
+ // Preferences menuItem is invoked.
118
+ MenuHookObject target = new MenuHookObject( aboutListener, preferencesListener );
119
+
120
+ try {
121
+ // Initialize the menuItems.
122
+ initialize( target );
123
+ } catch ( Exception e ) {
124
+ throw new IllegalStateException( e );
125
+ }
126
+
127
+ // Connect the quit/exit menu.
128
+ if ( !display.isDisposed() ) {
129
+ display.addListener( SWT.Close, quitListener );
130
+ }
131
+
132
+ // Schedule disposal of callback object
133
+ display.disposeExec( new Runnable() {
134
+ public void run() {
135
+ invoke( proc3Args, "dispose" );
136
+ }
137
+ } );
138
+ }
139
+
140
+ private void initialize( Object callbackObject )
141
+ throws Exception {
142
+
143
+ Class<?> osCls = classForName( "org.eclipse.swt.internal.cocoa.OS" );
144
+
145
+ // Register names in objective-c.
146
+ if ( sel_toolbarButtonClicked_ == 0 ) {
147
+ // sel_toolbarButtonClicked_ = registerName( osCls, "toolbarButtonClicked:" ); //$NON-NLS-1$
148
+ sel_preferencesMenuItemSelected_ = registerName( osCls, "preferencesMenuItemSelected:" ); //$NON-NLS-1$
149
+ sel_aboutMenuItemSelected_ = registerName( osCls, "aboutMenuItemSelected:" ); //$NON-NLS-1$
150
+ }
151
+
152
+ // Create an SWT Callback object that will invoke the actionProc method of our internal
153
+ // callbackObject.
154
+ proc3Args = new Callback( callbackObject, "actionProc", 3 ); //$NON-NLS-1$
155
+ Method getAddress = Callback.class.getMethod( "getAddress", new Class[0] );
156
+ Object object = getAddress.invoke( proc3Args, (Object[]) null );
157
+ long proc3 = convertToLong( object );
158
+ if ( proc3 == 0 ) {
159
+ SWT.error( SWT.ERROR_NO_MORE_CALLBACKS );
160
+ }
161
+
162
+ Class<?> nsmenuCls = classForName( "org.eclipse.swt.internal.cocoa.NSMenu" );
163
+ Class<?> nsmenuitemCls = classForName( "org.eclipse.swt.internal.cocoa.NSMenuItem" );
164
+ Class<?> nsstringCls = classForName( "org.eclipse.swt.internal.cocoa.NSString" );
165
+ Class<?> nsapplicationCls = classForName( "org.eclipse.swt.internal.cocoa.NSApplication" );
166
+
167
+ // Instead of creating a new delegate class in objective-c,
168
+ // just use the current SWTApplicationDelegate. An instance of this
169
+ // is a field of the Cocoa Display object and is already the target
170
+ // for the menuItems. So just get this class and add the new methods
171
+ // to it.
172
+ object = invoke( osCls, "objc_lookUpClass", new Object[] { "SWTApplicationDelegate" } );
173
+ long cls = convertToLong( object );
174
+
175
+ // Add the action callbacks for Preferences and About menu items.
176
+ invoke( osCls, "class_addMethod", new Object[] {
177
+ wrapPointer( cls ),
178
+ wrapPointer( sel_preferencesMenuItemSelected_ ),
179
+ wrapPointer( proc3 ),
180
+ "@:@" } ); //$NON-NLS-1$
181
+ invoke( osCls, "class_addMethod", new Object[] {
182
+ wrapPointer( cls ),
183
+ wrapPointer( sel_aboutMenuItemSelected_ ),
184
+ wrapPointer( proc3 ),
185
+ "@:@" } ); //$NON-NLS-1$
186
+
187
+ // Get the Mac OS X Application menu.
188
+ Object sharedApplication = invoke( nsapplicationCls, "sharedApplication" );
189
+ Object mainMenu = invoke( sharedApplication, "mainMenu" );
190
+ Object mainMenuItem = invoke( nsmenuCls, mainMenu, "itemAtIndex", new Object[] { wrapPointer( 0 ) } );
191
+ Object appMenu = invoke( mainMenuItem, "submenu" );
192
+
193
+ // Create the About <application-name> menu command
194
+ Object aboutMenuItem =
195
+ invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kAboutMenuItem ) } );
196
+ if ( appName != null ) {
197
+ Object nsStr = invoke( nsstringCls, "stringWith", new Object[] { "About " + appName } );
198
+ invoke( nsmenuitemCls, aboutMenuItem, "setTitle", new Object[] { nsStr } );
199
+ }
200
+ // Rename the quit action.
201
+ if ( appName != null ) {
202
+ Object quitMenuItem =
203
+ invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kQuitMenuItem ) } );
204
+ Object nsStr = invoke( nsstringCls, "stringWith", new Object[] { "Quit " + appName } );
205
+ invoke( nsmenuitemCls, quitMenuItem, "setTitle", new Object[] { nsStr } );
206
+ }
207
+
208
+ // Enable the Preferences menuItem.
209
+ Object prefMenuItem =
210
+ invoke( nsmenuCls, appMenu, "itemAtIndex", new Object[] { wrapPointer( kPreferencesMenuItem ) } );
211
+ invoke( nsmenuitemCls, prefMenuItem, "setEnabled", new Object[] { true } );
212
+
213
+ // Set the action to execute when the About or Preferences menuItem is invoked.
214
+ //
215
+ // We don't need to set the target here as the current target is the SWTApplicationDelegate
216
+ // and we have registerd the new selectors on it. So just set the new action to invoke the
217
+ // selector.
218
+ invoke( nsmenuitemCls, prefMenuItem, "setAction",
219
+ new Object[] { wrapPointer( sel_preferencesMenuItemSelected_ ) } );
220
+ invoke( nsmenuitemCls, aboutMenuItem, "setAction",
221
+ new Object[] { wrapPointer( sel_aboutMenuItemSelected_ ) } );
222
+ }
223
+
224
+ private long registerName( Class<?> osCls, String name )
225
+ throws IllegalArgumentException, SecurityException, IllegalAccessException,
226
+ InvocationTargetException, NoSuchMethodException {
227
+ Object object = invoke( osCls, "sel_registerName", new Object[] { name } );
228
+ return convertToLong( object );
229
+ }
230
+
231
+ private long convertToLong( Object object ) {
232
+ if ( object instanceof Integer ) {
233
+ Integer i = (Integer) object;
234
+ return i.longValue();
235
+ }
236
+ if ( object instanceof Long ) {
237
+ Long l = (Long) object;
238
+ return l.longValue();
239
+ }
240
+ return 0;
241
+ }
242
+
243
+ private static Object wrapPointer( long value ) {
244
+ Class<?> PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
245
+ if ( PTR_CLASS == long.class ) {
246
+ return new Long( value );
247
+ } else {
248
+ return new Integer( (int) value );
249
+ }
250
+ }
251
+
252
+ private static Object invoke( Class<?> clazz, String methodName, Object[] args ) {
253
+ return invoke( clazz, null, methodName, args );
254
+ }
255
+
256
+ private static Object invoke( Class<?> clazz, Object target, String methodName, Object[] args ) {
257
+ try {
258
+ Class<?>[] signature = new Class<?>[args.length];
259
+ for ( int i = 0; i < args.length; i++ ) {
260
+ Class<?> thisClass = args[i].getClass();
261
+ if ( thisClass == Integer.class )
262
+ signature[i] = int.class;
263
+ else if ( thisClass == Long.class )
264
+ signature[i] = long.class;
265
+ else if ( thisClass == Byte.class )
266
+ signature[i] = byte.class;
267
+ else if ( thisClass == Boolean.class )
268
+ signature[i] = boolean.class;
269
+ else
270
+ signature[i] = thisClass;
271
+ }
272
+ Method method = clazz.getMethod( methodName, signature );
273
+ return method.invoke( target, args );
274
+ } catch ( Exception e ) {
275
+ throw new IllegalStateException( e );
276
+ }
277
+ }
278
+
279
+ private Class<?> classForName( String classname ) {
280
+ try {
281
+ Class<?> cls = Class.forName( classname );
282
+ return cls;
283
+ } catch ( ClassNotFoundException e ) {
284
+ throw new IllegalStateException( e );
285
+ }
286
+ }
287
+
288
+ private Object invoke( Class<?> cls, String methodName ) {
289
+ return invoke( cls, methodName, (Class<?>[]) null, (Object[]) null );
290
+ }
291
+
292
+ private Object invoke( Class<?> cls, String methodName, Class<?>[] paramTypes, Object... arguments ) {
293
+ try {
294
+ Method m = cls.getDeclaredMethod( methodName, paramTypes );
295
+ return m.invoke( null, arguments );
296
+ } catch ( Exception e ) {
297
+ throw new IllegalStateException( e );
298
+ }
299
+ }
300
+
301
+ private Object invoke( Object obj, String methodName ) {
302
+ return invoke( obj, methodName, (Class<?>[]) null, (Object[]) null );
303
+ }
304
+
305
+ private Object invoke( Object obj, String methodName, Class<?>[] paramTypes, Object... arguments ) {
306
+ try {
307
+ Method m = obj.getClass().getDeclaredMethod( methodName, paramTypes );
308
+ return m.invoke( obj, arguments );
309
+ } catch ( Exception e ) {
310
+ throw new IllegalStateException( e );
311
+ }
312
+ }
313
+ }