redcar 0.9.2 → 0.10

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 (234) hide show
  1. data/CHANGES +34 -4
  2. data/Rakefile +2 -1
  3. data/lib/redcar.rb +3 -3
  4. data/lib/redcar/installer.rb +2 -3
  5. data/plugins/application/features/step_definitions/dialog_steps.rb +7 -0
  6. data/plugins/application/features/step_definitions/key_steps.rb +18 -0
  7. data/plugins/application/features/step_definitions/menu_steps.rb +5 -6
  8. data/plugins/application/features/step_definitions/speedbar_steps.rb +29 -9
  9. data/plugins/application/features/step_definitions/tree_steps.rb +13 -0
  10. data/plugins/application/features/support/env.rb +39 -5
  11. data/plugins/application/features/support/fake_event.rb +12 -0
  12. data/plugins/application/lib/application.rb +5 -6
  13. data/plugins/application/lib/application/dialog.rb +53 -10
  14. data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
  15. data/plugins/application/lib/application/keymap.rb +10 -8
  16. data/plugins/application/lib/application/menu.rb +38 -16
  17. data/plugins/application/lib/application/treebook.rb +30 -0
  18. data/plugins/application/lib/application/window.rb +20 -2
  19. data/plugins/application/spec/application/command/executor_spec.rb +1 -0
  20. data/plugins/application/spec/application/menu_spec.rb +26 -26
  21. data/plugins/application/spec/application/treebook_spec.rb +6 -6
  22. data/plugins/application/spec/spec_helper.rb +10 -1
  23. data/plugins/application_swt/lib/application_swt.rb +25 -3
  24. data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +48 -27
  25. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +22 -11
  26. data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
  27. data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
  28. data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
  29. data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
  30. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +4 -4
  31. data/plugins/application_swt/lib/application_swt/notebook.rb +5 -8
  32. data/plugins/application_swt/lib/application_swt/speedbar.rb +1 -0
  33. data/plugins/application_swt/lib/application_swt/treebook.rb +6 -8
  34. data/plugins/application_swt/lib/application_swt/window.rb +85 -57
  35. data/plugins/application_swt/lib/swt/graphics_utils.rb +23 -0
  36. data/plugins/application_swt/lib/swt/vtab_folder.rb +7 -0
  37. data/plugins/application_swt/lib/swt/vtab_label.rb +1 -1
  38. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +142 -0
  39. data/plugins/auto_completer/lib/auto_completer.rb +10 -42
  40. data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
  41. data/plugins/clojure/lib/clojure.rb +33 -0
  42. data/plugins/{repl/lib/repl/clojure_mirror.rb → clojure/lib/clojure/repl_mirror.rb} +16 -20
  43. data/plugins/clojure/plugin.rb +9 -0
  44. data/plugins/{repl/spec/repl/clojure_mirror_spec.rb → clojure/spec/clojure/repl_mirror_spec.rb} +12 -13
  45. data/plugins/clojure/spec/spec_helper.rb +5 -0
  46. data/plugins/{repl → clojure}/vendor/Wrapper.clj +0 -0
  47. data/plugins/{repl → clojure}/vendor/dummy +0 -0
  48. data/plugins/{repl → clojure}/vendor/enclojure-wrapper.jar +0 -0
  49. data/plugins/connection_manager/lib/connection_manager.rb +13 -13
  50. data/plugins/declarations/lib/declarations.rb +17 -6
  51. data/plugins/document_search/features/find.feature +389 -0
  52. data/plugins/document_search/features/find_and_replace.feature +723 -0
  53. data/plugins/document_search/features/replace.feature +69 -62
  54. data/plugins/document_search/lib/document_search.rb +81 -64
  55. data/plugins/document_search/lib/document_search/commands.rb +258 -0
  56. data/plugins/document_search/lib/document_search/find_and_replace_speedbar.rb +142 -0
  57. data/plugins/document_search/lib/document_search/find_speedbar.rb +102 -0
  58. data/plugins/document_search/lib/document_search/query_options.rb +45 -0
  59. data/plugins/edit_view/features/case_change.feature +9 -5
  60. data/plugins/edit_view/features/step_definitions/editing_steps.rb +19 -0
  61. data/plugins/edit_view/lib/edit_view.rb +15 -12
  62. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +12 -2
  63. data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +1 -1
  64. data/plugins/edit_view/lib/edit_view/document.rb +129 -99
  65. data/plugins/edit_view_swt/lib/edit_view_swt.rb +33 -15
  66. data/plugins/encryption/encryption.rb +2 -0
  67. data/plugins/find-in-project/lib/find_in_project.rb +3 -5
  68. data/plugins/find-in-project/lib/find_in_project/views/index.html.erb +2 -0
  69. data/plugins/groovy/features/step_definitions/groovy_steps.rb +2 -2
  70. data/plugins/groovy/features/syntax_check_groovy.feature +3 -3
  71. data/plugins/groovy/lib/groovy.rb +38 -0
  72. data/plugins/groovy/lib/groovy/commands.rb +10 -0
  73. data/plugins/{repl/lib/repl/groovy_mirror.rb → groovy/lib/groovy/repl_mirror.rb} +33 -13
  74. data/plugins/groovy/lib/{syntax_check/groovy.rb → groovy/syntax_checker.rb} +13 -8
  75. data/plugins/groovy/plugin.rb +5 -4
  76. data/plugins/{repl/spec/repl/groovy_mirror_spec.rb → groovy/spec/groovy/repl_mirror_spec.rb} +14 -13
  77. data/plugins/groovy/spec/spec_helper.rb +5 -0
  78. data/plugins/html_view/assets/json2.js +476 -0
  79. data/plugins/html_view/lib/html_view.rb +1 -0
  80. data/plugins/java/features/fixtures/test.java +0 -0
  81. data/plugins/java/features/support/env.rb +27 -0
  82. data/plugins/java/features/syntax_check_java.feature +86 -0
  83. data/plugins/java/lib/syntax_check/java.rb +86 -0
  84. data/plugins/java/plugin.rb +7 -0
  85. data/plugins/javascript/features/fixtures/test2.js +5 -0
  86. data/plugins/javascript/features/step_definitions/javascript_steps.rb +16 -0
  87. data/plugins/javascript/features/support/env.rb +14 -0
  88. data/plugins/javascript/features/syntax_check_javascript.feature +46 -3
  89. data/plugins/javascript/lib/syntax_check/javascript.rb +15 -9
  90. data/plugins/line_tools/features/trim_line.feature +49 -0
  91. data/plugins/line_tools/lib/line_tools.rb +5 -1
  92. data/plugins/mirah/README +7 -0
  93. data/plugins/mirah/features/fixtures/test.mirah +2 -0
  94. data/plugins/mirah/features/syntax_check_mirah.feature +46 -0
  95. data/plugins/mirah/lib/mirah.rb +43 -0
  96. data/plugins/mirah/lib/mirah/my_error_handler.rb +22 -0
  97. data/plugins/mirah/lib/mirah/repl_mirror.rb +50 -0
  98. data/plugins/mirah/lib/mirah/syntax_checker.rb +38 -0
  99. data/plugins/mirah/plugin.rb +8 -0
  100. data/plugins/mirah/spec/mirah/repl_mirror_spec.rb +188 -0
  101. data/plugins/mirah/spec/spec_helper.rb +5 -0
  102. data/plugins/mirah/vendor/mirah-parser.jar +0 -0
  103. data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +24 -23
  104. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +10 -1
  105. data/plugins/plugin_manager_ui/views/index.html.erb +2 -0
  106. data/plugins/project/features/find_file.feature +40 -16
  107. data/plugins/project/features/highlight_focussed_tab.feature +16 -10
  108. data/plugins/project/features/step_definitions/find_file_steps.rb +11 -0
  109. data/plugins/project/features/step_definitions/project_tree_steps.rb +5 -1
  110. data/plugins/project/features/support/env.rb +5 -0
  111. data/plugins/project/lib/project/commands.rb +8 -1
  112. data/plugins/project/lib/project/dir_controller.rb +4 -1
  113. data/plugins/project/lib/project/find_file_dialog.rb +16 -12
  114. data/plugins/project/lib/project/manager.rb +30 -1
  115. data/plugins/project_search/vendor/lucene/CHANGELOG +147 -0
  116. data/plugins/project_search/vendor/lucene/CONTRIBUTORS +17 -0
  117. data/plugins/project_search/vendor/lucene/Gemfile +9 -0
  118. data/plugins/project_search/vendor/lucene/Gemfile.lock +33 -0
  119. data/plugins/project_search/vendor/lucene/LICENSE +19 -0
  120. data/plugins/project_search/vendor/lucene/README.rdoc +283 -0
  121. data/plugins/project_search/vendor/lucene/Rakefile +35 -0
  122. data/plugins/project_search/vendor/lucene/examples/active_model/serializers.rb +25 -0
  123. data/plugins/project_search/vendor/lucene/examples/active_model/validation.rb +26 -0
  124. data/plugins/project_search/vendor/lucene/examples/admin/Rakefile +4 -0
  125. data/plugins/project_search/vendor/lucene/examples/admin/admin.rb +29 -0
  126. data/plugins/project_search/vendor/lucene/examples/admin/public/jquery.js +4376 -0
  127. data/plugins/project_search/vendor/lucene/examples/admin/public/neo4j.css +153 -0
  128. data/plugins/project_search/vendor/lucene/examples/admin/public/neo_admin.js +18 -0
  129. data/plugins/project_search/vendor/lucene/examples/admin/spec/admin_spec.rb +26 -0
  130. data/plugins/project_search/vendor/lucene/examples/admin/views/index.erb +21 -0
  131. data/plugins/project_search/vendor/lucene/examples/filetree/README.rdoc +9 -0
  132. data/plugins/project_search/vendor/lucene/examples/filetree/app.rb +7 -0
  133. data/plugins/project_search/vendor/lucene/examples/filetree/batch.props +5 -0
  134. data/plugins/project_search/vendor/lucene/examples/filetree/features/step_definitions/add_steps.rb +121 -0
  135. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/env.rb +30 -0
  136. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/rspec_helper.rb +50 -0
  137. data/plugins/project_search/vendor/lucene/examples/filetree/features/treesizes.feature +19 -0
  138. data/plugins/project_search/vendor/lucene/examples/imdb/1_create_neo_db.rb +66 -0
  139. data/plugins/project_search/vendor/lucene/examples/imdb/2_index_db.rb +23 -0
  140. data/plugins/project_search/vendor/lucene/examples/imdb/README +12 -0
  141. data/plugins/project_search/vendor/lucene/examples/imdb/find_actors.rb +56 -0
  142. data/plugins/project_search/vendor/lucene/examples/imdb/install.sh +12 -0
  143. data/plugins/project_search/vendor/lucene/examples/imdb/model.rb +37 -0
  144. data/plugins/project_search/vendor/lucene/examples/railway/README +111 -0
  145. data/plugins/project_search/vendor/lucene/examples/railway/railnet-app.rb +31 -0
  146. data/plugins/project_search/vendor/lucene/examples/railway/railnet-data.rb +42 -0
  147. data/plugins/project_search/vendor/lucene/examples/rest/example.rb +41 -0
  148. data/plugins/project_search/vendor/lucene/examples/you_might_know/YouMightKnow.java +60 -0
  149. data/plugins/project_search/vendor/lucene/examples/you_might_know/all_simple_paths.rb +34 -0
  150. data/plugins/project_search/vendor/lucene/examples/you_might_know/nodes.rb +34 -0
  151. data/plugins/project_search/vendor/lucene/examples/you_might_know/you_might_know.rb +50 -0
  152. data/plugins/project_search/vendor/lucene/lib/lucene.rb +15 -0
  153. data/plugins/project_search/vendor/lucene/lib/lucene/config.rb +145 -0
  154. data/plugins/project_search/vendor/lucene/lib/lucene/document.rb +96 -0
  155. data/plugins/project_search/vendor/lucene/lib/lucene/field_info.rb +144 -0
  156. data/plugins/project_search/vendor/lucene/lib/lucene/hits.rb +54 -0
  157. data/plugins/project_search/vendor/lucene/lib/lucene/index.rb +267 -0
  158. data/plugins/project_search/vendor/lucene/lib/lucene/index_info.rb +146 -0
  159. data/plugins/project_search/vendor/lucene/lib/lucene/index_searcher.rb +157 -0
  160. data/plugins/project_search/vendor/lucene/lib/lucene/jars.rb +5 -0
  161. data/plugins/project_search/vendor/lucene/lib/lucene/query_dsl.rb +135 -0
  162. data/plugins/project_search/vendor/lucene/lib/lucene/transaction.rb +117 -0
  163. data/plugins/project_search/vendor/lucene/lib/lucene/version.rb +3 -0
  164. data/plugins/project_search/vendor/lucene/lucene.gemspec +23 -0
  165. data/plugins/project_search/vendor/lucene/spec/lucene/document_spec.rb +32 -0
  166. data/plugins/project_search/vendor/lucene/spec/lucene/field_info_spec.rb +70 -0
  167. data/plugins/project_search/vendor/lucene/spec/lucene/index_info_spec.rb +76 -0
  168. data/plugins/project_search/vendor/lucene/spec/lucene/index_spec.rb +643 -0
  169. data/plugins/project_search/vendor/lucene/spec/lucene/query_dsl_spec.rb +142 -0
  170. data/plugins/project_search/vendor/lucene/spec/lucene/sort_spec.rb +101 -0
  171. data/plugins/project_search/vendor/lucene/spec/lucene/spec_helper.rb +10 -0
  172. data/plugins/project_search/vendor/lucene/spec/lucene/transaction_spec.rb +118 -0
  173. data/plugins/redcar/features/alter_font_size.feature +25 -0
  174. data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
  175. data/plugins/redcar/redcar.rb +256 -43
  176. data/plugins/repl/features/command_editing.feature +55 -0
  177. data/plugins/repl/features/command_history.feature +75 -0
  178. data/plugins/repl/features/step_definitions/repl_steps.rb +17 -1
  179. data/plugins/repl/features/support/env.rb +24 -0
  180. data/plugins/repl/features/support/fake_repl.rb +16 -0
  181. data/plugins/repl/lib/repl.rb +17 -74
  182. data/plugins/repl/lib/repl/repl_command.rb +20 -0
  183. data/plugins/repl/lib/repl/repl_mirror.rb +168 -22
  184. data/plugins/repl/lib/repl/repl_tab.rb +131 -6
  185. data/plugins/repl/plugin.rb +1 -1
  186. data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
  187. data/plugins/repl/spec/spec_helper.rb +1 -1
  188. data/plugins/repl_swt/lib/repl_swt.rb +7 -0
  189. data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
  190. data/plugins/repl_swt/plugin.rb +8 -0
  191. data/plugins/ruby/lib/ruby.rb +35 -0
  192. data/plugins/{repl/lib/repl/ruby_mirror.rb → ruby/lib/ruby/repl_mirror.rb} +12 -12
  193. data/plugins/ruby/lib/{syntax_check/ruby.rb → ruby/syntax_checker.rb} +3 -3
  194. data/plugins/ruby/plugin.rb +5 -4
  195. data/plugins/{repl/spec/repl/ruby_mirror_spec.rb → ruby/spec/ruby/repl_mirror_spec.rb} +38 -29
  196. data/plugins/ruby/spec/spec_helper.rb +5 -0
  197. data/plugins/runnables/lib/runnables.rb +2 -0
  198. data/plugins/runnables/lib/runnables/command_output_controller.rb +5 -0
  199. data/plugins/runnables/lib/runnables/output_processor.rb +14 -3
  200. data/plugins/runnables/views/command_output.html.erb +3 -2
  201. data/plugins/scm/lib/scm.rb +4 -2
  202. data/plugins/scm/lib/scm/diff_mirror.rb +6 -6
  203. data/plugins/scm_git/lib/scm_git.rb +136 -107
  204. data/plugins/scm_git/lib/scm_git/change.rb +28 -19
  205. data/plugins/snippets/lib/snippets/explorer.rb +2 -2
  206. data/plugins/swt/lib/swt/full_swt.rb +1 -0
  207. data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +4 -0
  208. data/plugins/syntax_check/features/support/env.rb +3 -0
  209. data/plugins/syntax_check/lib/syntax_check.rb +71 -5
  210. data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
  211. data/plugins/test_runner/lib/test_runner.rb +39 -0
  212. data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
  213. data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
  214. data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +26 -0
  215. data/plugins/test_runner/plugin.rb +8 -0
  216. data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
  217. data/plugins/test_runner/spec/spec_helper.rb +5 -0
  218. data/plugins/textmate/lib/textmate.rb +12 -2
  219. data/plugins/textmate/vendor/redcar-bundles/Bundles/HTML.tmbundle/Syntaxes/HTML.plist +0 -2
  220. data/plugins/textmate/vendor/redcar-bundles/Bundles/Mirah.tmbundle/Syntaxes/Mirah.plist +22 -0
  221. data/plugins/textmate/vendor/redcar-bundles/Bundles/Mirah.tmbundle/info.plist +12 -0
  222. data/plugins/textmate/vendor/redcar-bundles/Bundles/Ruby.tmbundle/Syntaxes/Ruby.plist +2 -0
  223. data/plugins/todo_list/lib/todo_list.rb +7 -0
  224. data/plugins/todo_list/lib/todo_list/todo_controller.rb +3 -1
  225. data/plugins/tree/lib/tree.rb +4 -0
  226. data/plugins/tree_view_swt/lib/tree_view_swt.rb +5 -0
  227. data/plugins/web_bookmarks/lib/web_bookmarks.rb +10 -0
  228. metadata +137 -22
  229. data/plugins/document_search/features/search.feature +0 -163
  230. data/plugins/document_search/lib/document_search/replace_all_command.rb +0 -27
  231. data/plugins/document_search/lib/document_search/replace_command.rb +0 -38
  232. data/plugins/document_search/lib/document_search/replace_next_command.rb +0 -27
  233. data/plugins/document_search/lib/document_search/search_and_replace.rb +0 -81
  234. data/plugins/ruby/README +0 -6
@@ -0,0 +1,85 @@
1
+
2
+ module Redcar
3
+ # A type of dialog for displaying a list inside a tab. Example uses include
4
+ # selection dialogs for code completion or dynamically opening files based on
5
+ # tab content.
6
+ # Modeless List dialogs can also add sub-lists, by implementing the 'previous_list'
7
+ # and/or 'next_list' methods, which are called when a ARROW_LEFT or ARROW_RIGHT
8
+ # key event is generated.
9
+ #
10
+ # Subclasses should implement the 'selected' method,
11
+ # and optionally 'previous_list' and 'next_list' if applicable.
12
+ class ModelessListDialog
13
+ include Redcar::Model
14
+ include Redcar::Observable
15
+
16
+ def initialize(close_on_lost_focus=true)
17
+ @close_on_lost_focus = close_on_lost_focus
18
+ self.controller = Redcar.gui.controller_for(self).new(self)
19
+ end
20
+
21
+ # Set the size of the list dialog. The width is measured in pixels
22
+ # and the height in rows of text
23
+ def set_size(width,height)
24
+ notify_listeners(:set_size, width,height)
25
+ end
26
+ # Set the location of the list dialog relative to an offset in a tab
27
+ def set_location(offset)
28
+ notify_listeners(:set_location,offset)
29
+ end
30
+
31
+ def open
32
+ notify_listeners(:open)
33
+ end
34
+
35
+ def close
36
+ notify_listeners(:close)
37
+ end
38
+
39
+ # Whether to close the list dialog when focus is lost
40
+ def close_on_lost_focus
41
+ @close_on_lost_focus
42
+ end
43
+
44
+ # Get a 'previous' list, where applicable, based on the
45
+ # currently selected item in the list
46
+ #
47
+ # @return [Array<String>] list items
48
+ def previous_list
49
+ end
50
+
51
+ # Get a 'next' list, where applicable, based on the
52
+ # currently selected item in the list
53
+ #
54
+ # @return [Array<String>] list items
55
+ def next_list
56
+ end
57
+
58
+ # Update the items in the dialog list
59
+ #
60
+ # @param [Array<String>] items
61
+ def update_list(items)
62
+ notify_listeners :update_list, items
63
+ end
64
+
65
+ # Do an action, based on the index of the selected item
66
+ def selected(index)
67
+ p "'#{select(index)}' (at index #{index}) was selected!"
68
+ close
69
+ end
70
+
71
+ # Get the text of an item at an index
72
+ #
73
+ # @return [String]
74
+ def select(index)
75
+ self.controller.select index
76
+ end
77
+
78
+ # The index of the currently selected text
79
+ #
80
+ # @return [Integer]
81
+ def selection_index
82
+ self.controller.selection_index
83
+ end
84
+ end
85
+ end
@@ -4,36 +4,38 @@ module Redcar
4
4
  def self.build(name, platform, &block)
5
5
  Builder.new(name, platform, &block).keymap
6
6
  end
7
-
7
+
8
8
  attr_reader :name, :platforms
9
9
  attr_accessor :map
10
-
10
+
11
11
  def initialize(name, platforms)
12
12
  @name, @platforms = name, [*platforms]
13
13
  @map = {}
14
14
  end
15
-
15
+
16
16
  def link(key_string, command)
17
17
  @map[key_string] = command
18
18
  end
19
-
19
+
20
20
  def command(key_string)
21
21
  @map[key_string]
22
22
  end
23
-
23
+
24
24
  def command_to_key(command)
25
25
  @map.invert[command]
26
26
  end
27
-
27
+
28
28
  def length
29
29
  @map.length
30
30
  end
31
-
31
+
32
32
  def merge(other)
33
33
  keymap = Keymap.new(@name, @platforms)
34
+ (@map.keys & other.map.keys).each do |key|
35
+ puts "conflicting keybinding #{key}: #{@map[key].inspect} is being overwritten by #{other.map[key].inspect}"
36
+ end
34
37
  keymap.map = @map.merge(other.map)
35
38
  keymap
36
39
  end
37
40
  end
38
41
  end
39
-
@@ -3,43 +3,55 @@ module Redcar
3
3
  class Menu
4
4
  include Enumerable
5
5
  include Redcar::Model
6
-
6
+
7
7
  # Default priority for all menu's and items if they aren't explicitly provided
8
8
  DEFAULT_PRIORITY = 50
9
-
9
+
10
+ # Default mnemonic values for primary menus
11
+ MNEMONICS = {
12
+ "File" => "&File",
13
+ "Edit" => "&Edit",
14
+ "Project" => "&Project",
15
+ "Debug" => "&Debug",
16
+ "View" => "&View",
17
+ "Plugins" => "P&lugins",
18
+ "Bundles" => "&Bundles",
19
+ "Help" => "&Help"
20
+ }
21
+
10
22
  attr_reader :text, :entries, :priority
11
-
23
+
12
24
  # A Menu will initially have nothing in it.
13
25
  def initialize(text=nil, options={})
14
- @text, @entries, @priority = text || "", [], options[:priority]
26
+ @text, @entries, @priority = Menu.parse(text), [], options[:priority]
15
27
  end
16
-
28
+
17
29
  # Iterate over each entry, sorted by priority
18
30
  def each
19
31
  sorted = {:first => [], :last => []}
20
32
  entries.each {|e| (sorted[e.priority || Menu::DEFAULT_PRIORITY] ||= []) << e}
21
-
33
+
22
34
  # Get the nasty Symbols out of the hash so we can sort it
23
35
  first = sorted.delete(:first)
24
36
  last = sorted.delete(:last)
25
-
37
+
26
38
  # Yield up the results
27
39
  first.each {|val| yield val }
28
40
  sorted.keys.sort.each {|i| sorted[i].each {|val| yield val }}
29
41
  last.each {|val| yield val }
30
42
  end
31
-
43
+
32
44
  # Add a Redcar::MenuItem or a Redcar::Menu
33
45
  def <<(entry)
34
46
  entries << entry
35
47
  self
36
48
  end
37
-
49
+
38
50
  # Number of entries in the menu
39
51
  def length
40
52
  entries.length
41
53
  end
42
-
54
+
43
55
  # Fetch the sub_menu with the given name
44
56
  #
45
57
  # @param [String]
@@ -47,16 +59,16 @@ module Redcar
47
59
  def sub_menu(text)
48
60
  detect {|e| e.text == text and e.is_a?(Menu) }
49
61
  end
50
-
62
+
51
63
  def entry(text)
52
64
  detect {|e| e.text == text }
53
65
  end
54
-
66
+
55
67
  # Append items and sub_menus using the same syntax as Menu::Builder
56
68
  def build(&block)
57
69
  Menu::Builder.new(self, &block)
58
70
  end
59
-
71
+
60
72
  def ==(other)
61
73
  return false unless length == other.length
62
74
  return false unless text == other.text
@@ -65,15 +77,15 @@ module Redcar
65
77
  end
66
78
  true
67
79
  end
68
-
80
+
69
81
  def is_unique?
70
82
  false
71
83
  end
72
-
84
+
73
85
  def lazy_text?
74
86
  false
75
87
  end
76
-
88
+
77
89
  # Merge two Menu trees together. Modifies this Menu.
78
90
  #
79
91
  # @param [Menu] another Menu
@@ -91,5 +103,15 @@ module Redcar
91
103
  end
92
104
  end
93
105
  end
106
+
107
+ # Get menu text from a string, adding mnemonics where applicable
108
+ def self.parse(menu_text)
109
+ menu_text = "" unless menu_text
110
+ if Redcar.platform != :osx and mnemonic = MNEMONICS[menu_text]
111
+ mnemonic
112
+ else
113
+ menu_text
114
+ end
115
+ end
94
116
  end
95
117
  end
@@ -17,6 +17,7 @@ module Redcar
17
17
  @trees << tree
18
18
  @focussed_tree = tree
19
19
  notify_listeners(:tree_added, tree)
20
+ tree.focus
20
21
  Redcar.app.repeat_event(:tree_added) if Redcar.app
21
22
  end
22
23
 
@@ -27,6 +28,7 @@ module Redcar
27
28
  return if @focussed_tree == tree
28
29
  @focussed_tree = tree
29
30
  notify_listeners(:tree_focussed, tree)
31
+ tree.focus
30
32
  end
31
33
 
32
34
  # Remove a tree from this treebook
@@ -43,6 +45,34 @@ module Redcar
43
45
  end
44
46
  end
45
47
 
48
+ def switch_down
49
+ if @trees.any?
50
+ if @focussed_tree
51
+ index = @trees.index @focussed_tree
52
+ else
53
+ index = -1
54
+ end
55
+ new_tree_index = index + 1
56
+ new_tree_index = 0 if new_tree_index < 0 or new_tree_index >= @trees.size
57
+ tree = @trees[new_tree_index]
58
+ focus_tree(tree) if tree
59
+ end
60
+ end
61
+
62
+ def switch_up
63
+ if @trees.any?
64
+ if @focussed_tree
65
+ index = @trees.index @focussed_tree
66
+ else
67
+ index = 1
68
+ end
69
+ new_tree_index = index - 1
70
+ new_tree_index = @trees.size - 1 if new_tree_index < 0 or new_tree_index >= @trees.size
71
+ tree = @trees[new_tree_index]
72
+ focus_tree(tree) if tree
73
+ end
74
+ end
75
+
46
76
  private
47
77
 
48
78
  # Tell the Treebook that this tree has been focussed in the GUI.
@@ -68,7 +68,7 @@ module Redcar
68
68
  #
69
69
  # @events [(:new_notebook, notebook)]
70
70
  def create_notebook
71
- return if @notebooks.length == 2
71
+ # return if @notebooks.length == 2
72
72
  notebook = Redcar::Notebook.new(self)
73
73
  @notebooks << notebook
74
74
  if @notebooks.length == 1
@@ -78,6 +78,22 @@ module Redcar
78
78
  notify_listeners(:new_notebook, notebook)
79
79
  end
80
80
 
81
+ def enlarge_notebook(index)
82
+ notify_listeners(:enlarge_notebook,index)
83
+ end
84
+
85
+ def adjust_treebook_width(more=true)
86
+ if more
87
+ notify_listeners(:increase_treebook_width)
88
+ else
89
+ notify_listeners(:decrease_treebook_width)
90
+ end
91
+ end
92
+
93
+ def reset_notebook_widths
94
+ notify_listeners(:reset_notebook_widths)
95
+ end
96
+
81
97
  def attach_notebook_listeners(notebook)
82
98
  notebook.add_listener(:tab_focussed) do |tab|
83
99
  notify_listeners(:tab_focussed, tab)
@@ -143,7 +159,9 @@ module Redcar
143
159
  end
144
160
 
145
161
  def nonfocussed_notebook
146
- @notebooks.find {|nb| nb != @focussed_notebook }
162
+ i = @notebooks.index @focussed_notebook
163
+ @notebooks[(i + 1) % @notebooks.length]
164
+ #@notebooks.find {|nb| nb != @focussed_notebook }
147
165
  end
148
166
 
149
167
  # Sets the orientation of the notebooks.
@@ -3,6 +3,7 @@ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
  class Redcar::Command
4
4
  describe Executor do
5
5
  class FakeApp
6
+ def repeat_event(event); end
6
7
  attr_accessor :history
7
8
  end
8
9
 
@@ -2,7 +2,7 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
2
 
3
3
  describe Redcar::Menu do
4
4
  class DummyCommand; end
5
-
5
+
6
6
  describe "with no entries and no text" do
7
7
  before do
8
8
  @menu = Redcar::Menu.new
@@ -15,8 +15,8 @@ describe Redcar::Menu do
15
15
  it "reports length" do
16
16
  @menu.length.should == 0
17
17
  end
18
- end
19
-
18
+ end
19
+
20
20
  describe "with entries in it and text" do
21
21
  before do
22
22
  @menu = Redcar::Menu.new("Edit") \
@@ -28,17 +28,17 @@ describe Redcar::Menu do
28
28
  it "reports length" do
29
29
  @menu.length.should == 3
30
30
  end
31
-
31
+
32
32
  it "has text" do
33
- @menu.text.should == "Edit"
33
+ @menu.text.should == Redcar::Menu.parse("Edit")
34
34
  end
35
35
  end
36
-
36
+
37
37
  describe "building entries" do
38
38
  before do
39
39
  @menu = Redcar::Menu.new
40
40
  end
41
-
41
+
42
42
  it "should let you add items by building" do
43
43
  @menu.build do
44
44
  item "Cut", DummyCommand
@@ -47,24 +47,24 @@ describe Redcar::Menu do
47
47
  @menu.entries.first.text.should == "Cut"
48
48
  end
49
49
  end
50
-
50
+
51
51
  def build(name=nil, &block)
52
52
  Redcar::Menu::Builder.build(name, &block)
53
53
  end
54
-
54
+
55
55
  describe "merging Menus" do
56
56
  it "adds items" do
57
57
  menu = build "Plugins" do
58
58
  item "Foo", 1
59
59
  item "Bar", 2
60
60
  end
61
-
61
+
62
62
  menu2 = build "Plugins" do
63
63
  item "Bar", 3
64
64
  end
65
-
65
+
66
66
  menu.merge(menu2)
67
-
67
+
68
68
  menu.should == build("Plugins") do
69
69
  item "Foo", 1
70
70
  item "Bar", 3
@@ -76,45 +76,45 @@ describe Redcar::Menu do
76
76
  sub_menu "REPL" do
77
77
  end
78
78
  end
79
-
79
+
80
80
  menu2 = build "Plugins" do
81
81
  sub_menu "My Plugin" do
82
82
  end
83
83
  end
84
-
84
+
85
85
  menu.merge(menu2)
86
-
86
+
87
87
  menu.should == build("Plugins") do
88
88
  sub_menu "REPL" do
89
89
  end
90
90
  sub_menu "My Plugin" do
91
91
  end
92
-
92
+
93
93
  end
94
94
  end
95
-
95
+
96
96
  it "replaces a menu with an item and vice versa" do
97
97
  menu = build "Plugins" do
98
98
  item "My Plugin", 201
99
99
  sub_menu "REPL" do
100
100
  end
101
101
  end
102
-
102
+
103
103
  menu2 = build "Plugins" do
104
104
  item "REPL", 101
105
105
  sub_menu "My Plugin" do
106
106
  end
107
107
  end
108
-
108
+
109
109
  menu.merge(menu2)
110
-
110
+
111
111
  menu.should == build("Plugins") do
112
112
  sub_menu "My Plugin" do
113
113
  end
114
114
  item "REPL", 101
115
115
  end
116
116
  end
117
-
117
+
118
118
  it "puts newer ones on the end" do
119
119
  menu = build "Plugins" do
120
120
  sub_menu "REPL" do
@@ -130,9 +130,9 @@ describe Redcar::Menu do
130
130
  item "Open", 101
131
131
  end
132
132
  end
133
-
133
+
134
134
  menu.merge(menu2)
135
-
135
+
136
136
  menu.should == build("Plugins") do
137
137
  sub_menu "REPL" do
138
138
  end
@@ -144,7 +144,7 @@ describe Redcar::Menu do
144
144
  end
145
145
 
146
146
  end
147
-
147
+
148
148
  it "uses the priority of whichever menu has one" do
149
149
  menu = build("Main"){ sub_menu("Project"){} }
150
150
  menu2 = build("Main"){ sub_menu("Project", :priority => 10){} }
@@ -156,12 +156,12 @@ describe Redcar::Menu do
156
156
  menu.merge(menu2)
157
157
  menu.entries.first.priority.should == 10
158
158
  end
159
-
159
+
160
160
  it "preserves own priority when merging" do
161
161
  menu = build("Main"){ sub_menu("Project", :priority => 10){} }
162
162
  menu2 = build("Main"){ sub_menu("Project", :priority => 5){} }
163
163
  menu.merge(menu2)
164
- menu.entries.first.priority.should == 10
164
+ menu.entries.first.priority.should == 10
165
165
  end
166
166
  end
167
167
  end