redcar 0.3.4.3 → 0.3.5
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.
- data/CHANGES +45 -0
- data/README.md +2 -1
- data/ROADMAP.md +0 -1
- data/Rakefile +10 -4
- data/bin/redcar +2 -2
- data/lib/openssl/build.properties +7 -0
- data/lib/plugin_manager/lib/plugin_manager.rb +10 -0
- data/lib/plugin_manager/lib/plugin_manager/plugin_definition.rb +1 -13
- data/lib/redcar.rb +12 -8
- data/lib/redcar/installer.rb +16 -15
- data/lib/redcar/ruby_extensions.rb +146 -1
- data/lib/redcar/runner.rb +16 -7
- data/lib/redcar/usage.rb +4 -7
- data/lib/redcar_quick_start.rb +5 -5
- data/lib/regex_replace.rb +0 -7
- data/plugins/application/features/step_definitions/command_steps.rb +5 -0
- data/plugins/application/features/step_definitions/dialog_steps.rb +5 -0
- data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +38 -0
- data/plugins/application/features/step_definitions/window_steps.rb +1 -1
- data/plugins/application/features/support/env.rb +44 -8
- data/plugins/application/lib/application.rb +32 -33
- data/plugins/application/lib/application/command.rb +32 -2
- data/plugins/application/lib/application/command/executor.rb +2 -12
- data/plugins/application/lib/application/dialog.rb +14 -14
- data/plugins/application/lib/application/event_spewer.rb +32 -0
- data/plugins/application/lib/application/menu.rb +5 -5
- data/plugins/application/lib/application/menu/builder.rb +5 -0
- data/plugins/application/lib/application/menu/lazy_menu.rb +24 -0
- data/plugins/application/lib/application/notebook.rb +4 -3
- data/plugins/application/lib/application/tab.rb +6 -2
- data/plugins/application/lib/application/window.rb +8 -4
- data/plugins/application/spec/application/menu/builder_spec.rb +17 -1
- data/plugins/application/spec/application/notebook_spec.rb +1 -1
- data/plugins/application_swt/build.xml +74 -0
- data/plugins/application_swt/lib/application_swt.rb +79 -0
- data/plugins/application_swt/lib/application_swt/cucumber_patches.rb +6 -1
- data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +25 -17
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +50 -12
- data/plugins/application_swt/lib/application_swt/html_tab.rb +20 -0
- data/plugins/application_swt/lib/application_swt/menu.rb +26 -2
- data/plugins/application_swt/lib/application_swt/notebook.rb +10 -12
- data/plugins/application_swt/lib/application_swt/window.rb +11 -11
- data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
- data/plugins/auto_completer/lib/auto_completer.rb +74 -67
- data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
- data/plugins/auto_completer/lib/auto_completer/document_controller.rb +2 -2
- data/plugins/auto_completer/lib/auto_completer/word_list.rb +8 -1
- data/plugins/auto_indenter/features/ruby_style_indentation.feature +24 -0
- data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +6 -0
- data/plugins/auto_indenter/features/support/env.rb +2 -0
- data/plugins/auto_indenter/lib/auto_indenter.rb +86 -0
- data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +91 -0
- data/plugins/auto_indenter/lib/auto_indenter/commands.rb +34 -0
- data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +67 -12
- data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
- data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
- data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
- data/plugins/auto_pairer/lib/auto_pairer.rb +1 -0
- data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +43 -42
- data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +1 -5
- data/plugins/core/lib/core.rb +12 -1
- data/plugins/core/lib/core/observable.rb +7 -7
- data/plugins/core/lib/core/persistent_cache.rb +14 -2
- data/plugins/core/lib/core/plugin.rb +7 -0
- data/plugins/core/lib/core/resource.rb +78 -0
- data/plugins/core/lib/core/task.rb +62 -0
- data/plugins/core/lib/core/task_queue.rb +72 -0
- data/plugins/core/spec/core/resource_spec.rb +124 -0
- data/plugins/core/spec/core/task_queue_spec.rb +202 -0
- data/plugins/core/spec/spec_helper.rb +23 -1
- data/plugins/declarations/TODO +3 -0
- data/plugins/declarations/lib/declarations.rb +144 -0
- data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
- data/plugins/declarations/lib/declarations/file.rb +68 -0
- data/plugins/declarations/lib/declarations/parser.rb +94 -0
- data/plugins/declarations/lib/declarations/select_tag_dialog.rb +44 -0
- data/plugins/declarations/plugin.rb +7 -0
- data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
- data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
- data/plugins/declarations/spec/spec_helper.rb +4 -0
- data/plugins/edit_view/features/indentation_commands.feature +40 -0
- data/plugins/edit_view/features/line_delimiter.feature +40 -0
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +16 -4
- data/plugins/edit_view/features/step_definitions/notebook_steps.rb +1 -1
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
- data/plugins/edit_view/features/step_definitions/window_steps.rb +5 -1
- data/plugins/edit_view/features/support/env.rb +3 -5
- data/plugins/edit_view/features/undo_and_redo.feature +21 -0
- data/plugins/edit_view/lib/edit_view.rb +57 -4
- data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +19 -3
- data/plugins/edit_view/lib/edit_view/document.rb +46 -11
- data/plugins/edit_view/lib/edit_view/document/indentation.rb +35 -0
- data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
- data/plugins/edit_view/lib/edit_view/tab_settings.rb +13 -3
- data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
- data/plugins/edit_view/spec/edit_view/document_spec.rb +22 -0
- data/plugins/edit_view/spec/spec_helper.rb +1 -0
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +59 -7
- data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +3 -3
- data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +2 -2
- data/plugins/edit_view_swt/vendor/java-mateview.rb +3 -2
- data/plugins/encryption/encryption.rb +13 -6
- data/plugins/execute_current_tab/lib/execute_current_tab.rb +25 -15
- data/plugins/html_view/assets/redcar.css +32 -1
- data/plugins/html_view/lib/html_view.rb +23 -3
- data/plugins/html_view/lib/html_view/html_tab.rb +4 -0
- data/plugins/my_plugin/lib/my_plugin.rb +4 -12
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +1 -0
- data/plugins/plugin_manager_ui/views/index.html.erb +30 -37
- data/plugins/project/features/find_file.feature +75 -0
- data/plugins/project/features/open_and_save_files.feature +7 -7
- data/plugins/project/features/open_directory_tree.feature +11 -3
- data/plugins/project/features/refresh_directory_tree.feature +7 -1
- data/plugins/project/features/step_definitions/directory_steps.rb +11 -1
- data/plugins/project/features/step_definitions/file_steps.rb +10 -0
- data/plugins/project/features/support/env.rb +6 -1
- data/plugins/project/features/watch_for_modified_files.feature +79 -0
- data/plugins/project/lib/project.rb +72 -306
- data/plugins/project/lib/project/commands.rb +128 -0
- data/plugins/project/lib/project/dir_mirror.rb +5 -1
- data/plugins/project/lib/project/drb_service.rb +21 -31
- data/plugins/project/lib/project/file_list.rb +76 -0
- data/plugins/project/lib/project/file_mirror.rb +13 -1
- data/plugins/project/lib/project/find_file_dialog.rb +22 -52
- data/plugins/project/lib/project/manager.rb +210 -0
- data/plugins/project/lib/project/recent_directories.rb +16 -3
- data/plugins/project/plugin.rb +1 -1
- data/plugins/project/spec/fixtures/myproject/README +2 -0
- data/plugins/project/spec/fixtures/myproject/lib/foo_lib.rb +1 -0
- data/plugins/project/spec/fixtures/myproject/spec/foo_spec.rb +1 -0
- data/plugins/project/{features → spec}/fixtures/winter.txt +0 -0
- data/plugins/project/spec/project/dir_mirror_spec.rb +1 -12
- data/plugins/project/spec/project/file_list_spec.rb +140 -0
- data/plugins/project/spec/spec_helper.rb +20 -0
- data/plugins/redcar/plugin.rb +1 -0
- data/plugins/redcar/redcar.rb +254 -84
- data/plugins/redcar_debug/lib/redcar_debug.rb +58 -11
- data/plugins/redcar_debug/vendor/jruby-prof/README +46 -0
- data/plugins/redcar_debug/vendor/jruby-prof/Rakefile +36 -0
- data/plugins/redcar_debug/vendor/jruby-prof/build.xml +31 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/call_tree.html +22677 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/call_tree.txt +589 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/flat.txt +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/graph.html +1670 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/graph.txt +125 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/pidigits.rb +92 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test.rb +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test2.rb +29 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test_exception.rb +28 -0
- data/plugins/redcar_debug/vendor/jruby-prof/example/test_overhead.rb +43 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof.rb +66 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/abstract_printer.rb +21 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/flat_text_printer.rb +35 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/graph_html_printer.rb +123 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/graph_text_printer.rb +45 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/invocation_set.rb +34 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/method.rb +107 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/profile_invocation.rb +43 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/simple_tree_printer.rb +27 -0
- data/plugins/redcar_debug/vendor/jruby-prof/lib/jruby-prof/tree_html_printer.rb +144 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/Invocation.java +14 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/JRubyProf.java +94 -0
- data/plugins/redcar_debug/vendor/jruby-prof/src/org/jruby/prof/ProfEventHook.java +49 -0
- data/plugins/redcar_debug/vendor/jruby-prof/templates/graph_row.html.erb +18 -0
- data/plugins/redcar_debug/vendor/jruby-prof/test/basic_test.rb +291 -0
- data/plugins/redcar_debug/views/history.html.erb +33 -0
- data/plugins/redcar_debug/views/index.html.erb +33 -0
- data/plugins/repl/lib/repl/internal_mirror.rb +3 -15
- data/plugins/repl/spec/repl/internal_mirror_spec.rb +2 -2
- data/plugins/snippets/lib/snippets.rb +0 -1
- data/plugins/snippets/lib/snippets/document_controller.rb +7 -1
- data/plugins/task_manager/lib/task_manager.rb +28 -0
- data/plugins/task_manager/plugin.rb +11 -0
- data/plugins/task_manager/views/index.html.erb +67 -0
- data/plugins/textmate/lib/textmate.rb +17 -21
- data/plugins/textmate/lib/textmate/plist.rb +1 -2
- data/plugins/textmate/lib/textmate/preference.rb +5 -1
- data/plugins/textmate/lib/textmate/snippet.rb +6 -1
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +0 -6
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/Comments.tmPreferences +1 -1
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/next_Cucumber_Plain_Text_Feature_Completions.tmPreferences +30 -0
- data/textmate/Bundles/Cucumber.tmbundle/Preferences/next_Symbol_list___Scenario.tmPreferences +19 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/next_Cucumber_Plain_Text_Feature.tmLanguage +221 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/next_Cucumber_Steps.tmLanguage +424 -0
- data/textmate/Bundles/Cucumber.tmbundle/Syntaxes/plaintext_template.erb +19 -77
- data/textmate/Bundles/Cucumber.tmbundle/info.plist +1 -20
- data/textmate/Bundles/Perl.tmbundle/Syntaxes/Perl.plist +1 -1
- data/textmate/Themes/Emacs Strict.tmTheme +241 -0
- data/textmate/Themes/IR_White.tmTheme +792 -0
- data/textmate/Themes/Monokai.tmTheme +291 -0
- data/textmate/Themes/WhysPoignant.tmTheme +191 -0
- metadata +92 -7
- data/plugins/application/features/main_window.feature +0 -8
- data/plugins/project/lib/project/project_command.rb +0 -5
- data/textmate/Bundles/Cucumber.tmbundle/Snippets/Scenario.tmSnippet +0 -22
- data/textmate/Bundles/Cucumber.tmbundle/Snippets/Story.tmSnippet +0 -25
|
@@ -5,8 +5,8 @@ module Redcar
|
|
|
5
5
|
include Redcar::Core::HasLogger
|
|
6
6
|
|
|
7
7
|
def self.current_environment
|
|
8
|
-
win = Redcar.app.focussed_window
|
|
9
|
-
tab = Redcar.app.
|
|
8
|
+
win = Redcar.app.focussed_window
|
|
9
|
+
tab = Redcar.app.focussed_notebook_tab
|
|
10
10
|
{ :win => win,
|
|
11
11
|
:tab => tab }
|
|
12
12
|
end
|
|
@@ -22,10 +22,8 @@ module Redcar
|
|
|
22
22
|
result = @command_instance.execute
|
|
23
23
|
rescue Object => e
|
|
24
24
|
@command_instance.error = e
|
|
25
|
-
log_error
|
|
26
25
|
rescue java.lang.StackOverflowError => e
|
|
27
26
|
@command_instance.error = e
|
|
28
|
-
log_error
|
|
29
27
|
end
|
|
30
28
|
record
|
|
31
29
|
result
|
|
@@ -33,14 +31,6 @@ module Redcar
|
|
|
33
31
|
|
|
34
32
|
private
|
|
35
33
|
|
|
36
|
-
def log_error
|
|
37
|
-
logger.error "* Error in command #{@command_instance.class}"
|
|
38
|
-
if @command_instance.error.respond_to?(:backtrace)
|
|
39
|
-
logger.error " " + @command_instance.error.message.to_s
|
|
40
|
-
@command_instance.error.backtrace.each {|l| logger.error(" " + l) }
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
34
|
def record
|
|
45
35
|
if Redcar.app.history
|
|
46
36
|
Redcar.app.history.record(@command_instance)
|
|
@@ -2,18 +2,18 @@ module Redcar
|
|
|
2
2
|
class Application
|
|
3
3
|
class Dialog
|
|
4
4
|
# Prompt the user with an open file dialog. Returns a path.
|
|
5
|
-
def self.open_file(
|
|
6
|
-
Redcar.gui.dialog_adapter.open_file(
|
|
5
|
+
def self.open_file(options)
|
|
6
|
+
Redcar.gui.dialog_adapter.open_file(options)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
# Prompt the user with an open directory dialog. Returns a path.
|
|
10
|
-
def self.open_directory(
|
|
11
|
-
Redcar.gui.dialog_adapter.open_directory(
|
|
10
|
+
def self.open_directory(options)
|
|
11
|
+
Redcar.gui.dialog_adapter.open_directory(options)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Prompt the user with an save file dialog. Returns a path.
|
|
15
|
-
def self.save_file(
|
|
16
|
-
Redcar.gui.dialog_adapter.save_file(
|
|
15
|
+
def self.save_file(options)
|
|
16
|
+
Redcar.gui.dialog_adapter.save_file(options)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
# Show a message to the user. Requires a message and
|
|
@@ -26,17 +26,17 @@ module Redcar
|
|
|
26
26
|
#
|
|
27
27
|
# For example:
|
|
28
28
|
#
|
|
29
|
-
# >> Application::Dialog.message_box(
|
|
29
|
+
# >> Application::Dialog.message_box("YO!", :type => :info,
|
|
30
30
|
# >> :buttons => :yes_no_cancel)
|
|
31
31
|
# => :yes
|
|
32
|
-
def self.message_box(
|
|
32
|
+
def self.message_box(text, options={})
|
|
33
33
|
if buttons = options[:buttons] and !available_message_box_button_combos.include?(buttons)
|
|
34
34
|
raise "option :buttons must be in #{available_message_box_button_combos.inspect}"
|
|
35
35
|
end
|
|
36
36
|
if type = options[:type] and !available_message_box_types.include?(type)
|
|
37
37
|
raise "option :type must be in #{available_message_box_button_types.inspect}"
|
|
38
38
|
end
|
|
39
|
-
Redcar.gui.dialog_adapter.message_box(
|
|
39
|
+
Redcar.gui.dialog_adapter.message_box(text, options)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# Returns the list of valid button combos that can be passed
|
|
@@ -61,7 +61,7 @@ module Redcar
|
|
|
61
61
|
#
|
|
62
62
|
# Example:
|
|
63
63
|
#
|
|
64
|
-
# Application::Dialog.input(
|
|
64
|
+
# Application::Dialog.input("Number", "Please enter a big number", "101") do |text|
|
|
65
65
|
# if text.to_i > 100
|
|
66
66
|
# nil
|
|
67
67
|
# else
|
|
@@ -70,13 +70,13 @@ module Redcar
|
|
|
70
70
|
# end
|
|
71
71
|
#
|
|
72
72
|
# The return value is a hash containing :button and :value.
|
|
73
|
-
def self.input(
|
|
74
|
-
Redcar.gui.dialog_adapter.input(
|
|
73
|
+
def self.input(title, message, initial_value="", &validator)
|
|
74
|
+
Redcar.gui.dialog_adapter.input(title, message, initial_value, &validator)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
# Shows a tool tip to the user, at the cursor location.
|
|
78
|
-
def self.tool_tip(
|
|
79
|
-
Redcar.gui.dialog_adapter.tool_tip(
|
|
78
|
+
def self.tool_tip(message)
|
|
79
|
+
Redcar.gui.dialog_adapter.tool_tip(message)
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
module Redcar
|
|
3
|
+
class Application
|
|
4
|
+
class EventSpewer
|
|
5
|
+
attr_accessor :within
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@within = {}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def ignore?(name, *args)
|
|
12
|
+
!!@within[[name, args]]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ignore(name, *args)
|
|
16
|
+
@within[[name, args]] = true
|
|
17
|
+
begin
|
|
18
|
+
yield
|
|
19
|
+
ensure
|
|
20
|
+
@within.delete([name, args])
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create(name, *args)
|
|
25
|
+
Redcar.plugin_manager.objects_implementing(:application_event_handler).each do |object|
|
|
26
|
+
handler = object.application_event_handler
|
|
27
|
+
handler.send(name, *args) if handler.respond_to?(name)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -13,18 +13,18 @@ module Redcar
|
|
|
13
13
|
|
|
14
14
|
# Iterate over each entry
|
|
15
15
|
def each
|
|
16
|
-
|
|
16
|
+
entries.each {|e| yield e}
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
# Add a Redcar::MenuItem or a Redcar::Menu
|
|
20
20
|
def <<(entry)
|
|
21
|
-
|
|
21
|
+
entries << entry
|
|
22
22
|
self
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# Number of entries in the menu
|
|
26
26
|
def length
|
|
27
|
-
|
|
27
|
+
entries.length
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Fetch the sub_menu with the given name
|
|
@@ -47,7 +47,7 @@ module Redcar
|
|
|
47
47
|
def ==(other)
|
|
48
48
|
return false unless length == other.length
|
|
49
49
|
return false unless text == other.text
|
|
50
|
-
|
|
50
|
+
entries.zip(other.entries) do |here, there|
|
|
51
51
|
return false unless here.class == there.class and here == there
|
|
52
52
|
end
|
|
53
53
|
true
|
|
@@ -62,7 +62,7 @@ module Redcar
|
|
|
62
62
|
if here.class == other_entry.class
|
|
63
63
|
here.merge(other_entry)
|
|
64
64
|
else
|
|
65
|
-
|
|
65
|
+
entries[entries.index(here)] = other_entry
|
|
66
66
|
end
|
|
67
67
|
else
|
|
68
68
|
self << other_entry
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
module Redcar
|
|
3
|
+
class Menu
|
|
4
|
+
class LazyMenu < Menu
|
|
5
|
+
|
|
6
|
+
def initialize(block, text=nil)
|
|
7
|
+
@text = text
|
|
8
|
+
@block = block
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def entries
|
|
12
|
+
Menu::Builder.build(&@block).entries
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def <<(*_)
|
|
16
|
+
raise
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def merge(*_)
|
|
20
|
+
raise
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
module Redcar
|
|
2
|
-
#
|
|
3
|
-
# Events: new_tab (tab)
|
|
4
2
|
class Notebook
|
|
5
3
|
include Redcar::Model
|
|
6
4
|
include Redcar::Observable
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
attr_reader :window
|
|
7
|
+
|
|
8
|
+
def initialize(window)
|
|
9
9
|
@tabs = []
|
|
10
10
|
@focussed_tab = nil
|
|
11
11
|
@tab_handlers = Hash.new {|h,k| h[k] = [] }
|
|
12
|
+
@window = window
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def length
|
|
@@ -14,7 +14,9 @@ module Redcar
|
|
|
14
14
|
#
|
|
15
15
|
# Events: close
|
|
16
16
|
def close
|
|
17
|
-
|
|
17
|
+
Redcar.app.events.ignore(:tab_close, self) do
|
|
18
|
+
notify_listeners(:close)
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
# Focus the tab within the notebook, and gives the keyboard focus to the
|
|
@@ -22,7 +24,9 @@ module Redcar
|
|
|
22
24
|
#
|
|
23
25
|
# Events: focus
|
|
24
26
|
def focus
|
|
25
|
-
|
|
27
|
+
Redcar.app.events.ignore(:tab_focus, self) do
|
|
28
|
+
notify_listeners(:focus)
|
|
29
|
+
end
|
|
26
30
|
end
|
|
27
31
|
|
|
28
32
|
def title
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
module Redcar
|
|
3
3
|
class Window
|
|
4
|
+
DEFAULT_TITLE = "Redcar"
|
|
5
|
+
|
|
4
6
|
include Redcar::Model
|
|
5
7
|
include Redcar::Observable
|
|
6
8
|
|
|
@@ -21,7 +23,7 @@ module Redcar
|
|
|
21
23
|
create_notebook
|
|
22
24
|
@treebook = Treebook.new
|
|
23
25
|
@speedbar = nil
|
|
24
|
-
self.title =
|
|
26
|
+
self.title = DEFAULT_TITLE
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
def title
|
|
@@ -47,7 +49,7 @@ module Redcar
|
|
|
47
49
|
# @events [(:new_notebook, notebook)]
|
|
48
50
|
def create_notebook
|
|
49
51
|
return if @notebooks.length == 2
|
|
50
|
-
notebook = Redcar::Notebook.new
|
|
52
|
+
notebook = Redcar::Notebook.new(self)
|
|
51
53
|
@notebooks << notebook
|
|
52
54
|
if @notebooks.length == 1
|
|
53
55
|
self.focussed_notebook = notebook
|
|
@@ -170,11 +172,13 @@ module Redcar
|
|
|
170
172
|
|
|
171
173
|
# Focus the Window.
|
|
172
174
|
def focus
|
|
173
|
-
|
|
175
|
+
Redcar.app.events.ignore(:window_focus, self) do
|
|
176
|
+
notify_listeners(:focussed, self)
|
|
177
|
+
end
|
|
174
178
|
end
|
|
175
179
|
|
|
176
180
|
def close
|
|
177
|
-
ignore(:
|
|
181
|
+
Redcar.app.events.ignore(:window_close, self) do
|
|
178
182
|
notify_listeners(:about_to_close, self)
|
|
179
183
|
notebooks.each do |notebook|
|
|
180
184
|
notebook.tabs.each {|tab| tab.close }
|
|
@@ -42,4 +42,20 @@ describe "Redcar::Menu::Builder DSL" do
|
|
|
42
42
|
top_item = builder.menu.entries.last
|
|
43
43
|
top_item.text.should == "Exit"
|
|
44
44
|
end
|
|
45
|
-
|
|
45
|
+
|
|
46
|
+
it "adds lazy submenus to the menu" do
|
|
47
|
+
builder = Redcar::Menu::Builder.new do
|
|
48
|
+
lazy_sub_menu "Export" do
|
|
49
|
+
item "PDF", :PDFCommand
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
builder.menu.length.should == 1
|
|
53
|
+
|
|
54
|
+
lazy_sub_menu = builder.menu.entries.first
|
|
55
|
+
lazy_sub_menu.should be_an_instance_of(Redcar::Menu::LazyMenu)
|
|
56
|
+
|
|
57
|
+
lazy_sub_menu.entries.length.should == 1
|
|
58
|
+
lazy_sub_menu.entries.first.text.should == "PDF"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<project name="redcar.application_swt" default="dist" basedir=".">
|
|
3
|
+
<!-- set global properties for this build -->
|
|
4
|
+
<property name="src" location="src"/>
|
|
5
|
+
<property name="build" location="build"/>
|
|
6
|
+
<property name="dist" location="lib/dist"/>
|
|
7
|
+
<property environment="env" />
|
|
8
|
+
|
|
9
|
+
<condition property="platform" value="osx">
|
|
10
|
+
<and>
|
|
11
|
+
<os family="mac" />
|
|
12
|
+
<os family="unix" />
|
|
13
|
+
<os arch="i386" />
|
|
14
|
+
</and>
|
|
15
|
+
</condition>
|
|
16
|
+
|
|
17
|
+
<condition property="platform" value="osx64">
|
|
18
|
+
<and>
|
|
19
|
+
<os family="mac" />
|
|
20
|
+
<os family="unix" />
|
|
21
|
+
<os arch="x86_64" />
|
|
22
|
+
</and>
|
|
23
|
+
</condition>
|
|
24
|
+
|
|
25
|
+
<condition property="platform" value="linux">
|
|
26
|
+
<and>
|
|
27
|
+
<os family="unix" />
|
|
28
|
+
<os arch="i386" />
|
|
29
|
+
</and>
|
|
30
|
+
</condition>
|
|
31
|
+
|
|
32
|
+
<condition property="platform" value="linux64">
|
|
33
|
+
<and>
|
|
34
|
+
<os family="unix" />
|
|
35
|
+
<os arch="amd64" />
|
|
36
|
+
</and>
|
|
37
|
+
</condition>
|
|
38
|
+
|
|
39
|
+
<condition property="platform" value="windows">
|
|
40
|
+
<os family="windows" />
|
|
41
|
+
</condition>
|
|
42
|
+
|
|
43
|
+
<path id="project.classpath">
|
|
44
|
+
<fileset dir="vendor/jface">
|
|
45
|
+
<include name="org.eclipse.jface.jar" />
|
|
46
|
+
</fileset>
|
|
47
|
+
|
|
48
|
+
<fileset dir="vendor/swt/${platform}">
|
|
49
|
+
<include name="*.jar" />
|
|
50
|
+
</fileset>
|
|
51
|
+
</path>
|
|
52
|
+
|
|
53
|
+
<target name="init">
|
|
54
|
+
<tstamp/>
|
|
55
|
+
<mkdir dir="${build}"/>
|
|
56
|
+
</target>
|
|
57
|
+
|
|
58
|
+
<target name="compile" depends="init" description="compile the source " >
|
|
59
|
+
<javac target="1.5" srcdir="${src}" destdir="${build}">
|
|
60
|
+
<classpath refid="project.classpath" />
|
|
61
|
+
</javac>
|
|
62
|
+
</target>
|
|
63
|
+
|
|
64
|
+
<target name="dist" depends="compile" description="generate the distribution" >
|
|
65
|
+
<mkdir dir="${dist}"/>
|
|
66
|
+
<jar jarfile="lib/dist/application_swt.jar" basedir="${build}"/>
|
|
67
|
+
</target>
|
|
68
|
+
|
|
69
|
+
<target name="clean"
|
|
70
|
+
description="clean up" >
|
|
71
|
+
<delete dir="${build}"/>
|
|
72
|
+
<delete dir="${dist}"/>
|
|
73
|
+
</target>
|
|
74
|
+
</project>
|
|
@@ -21,6 +21,8 @@ require "application_swt/treebook"
|
|
|
21
21
|
require "application_swt/window"
|
|
22
22
|
require "application_swt/swt/grid_data"
|
|
23
23
|
|
|
24
|
+
require "dist/application_swt"
|
|
25
|
+
|
|
24
26
|
module Redcar
|
|
25
27
|
class ApplicationSWT
|
|
26
28
|
include Redcar::Controller
|
|
@@ -92,16 +94,93 @@ module Redcar
|
|
|
92
94
|
shell.add_shell_listener(ShellListener.new)
|
|
93
95
|
end
|
|
94
96
|
|
|
97
|
+
def self.shell_dialogs
|
|
98
|
+
@shell_dialogs ||= {}
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.register_dialog(shell, dialog)
|
|
102
|
+
shell_dialogs[shell] = dialog
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def self.unregister_dialog(dialog)
|
|
106
|
+
shell_dialogs.delete(shell_dialogs.invert[dialog])
|
|
107
|
+
end
|
|
108
|
+
|
|
95
109
|
def initialize(model)
|
|
96
110
|
@model = model
|
|
97
111
|
add_listeners
|
|
112
|
+
add_swt_listeners
|
|
98
113
|
create_clipboard
|
|
114
|
+
create_fake_window
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def fake_shell
|
|
118
|
+
@fake_shell
|
|
99
119
|
end
|
|
100
120
|
|
|
121
|
+
def create_fake_window
|
|
122
|
+
if Redcar.platform == :osx
|
|
123
|
+
@fake_shell = Swt::Widgets::Shell.new(ApplicationSWT.display, Swt::SWT::NO_TRIM)
|
|
124
|
+
@fake_shell.open
|
|
125
|
+
@fake_shell.set_size(0, 0)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
class FakeWindow
|
|
130
|
+
def initialize(shell)
|
|
131
|
+
@shell = shell
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
attr_reader :shell
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def refresh_menu
|
|
138
|
+
if Redcar.platform == :osx
|
|
139
|
+
old_menu_bar = @fake_shell.menu_bar
|
|
140
|
+
fake_menu_controller = ApplicationSWT::Menu.new(FakeWindow.new(@fake_shell), Redcar.app.main_menu, Redcar.app.main_keymap, Swt::SWT::BAR)
|
|
141
|
+
fake_shell.menu_bar = fake_menu_controller.menu_bar
|
|
142
|
+
old_menu_bar.dispose if old_menu_bar
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
101
146
|
def add_listeners
|
|
102
147
|
@model.add_listener(:new_window, &method(:new_window))
|
|
103
148
|
end
|
|
104
149
|
|
|
150
|
+
class Listener
|
|
151
|
+
def initialize(name)
|
|
152
|
+
@name = name
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def handle_event(e)
|
|
156
|
+
Application::Dialog.message_box("#{@name} menu is not hooked up yet")
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
class QuitListener
|
|
161
|
+
def handle_event(e)
|
|
162
|
+
unless Redcar.app.events.ignore?(:application_close, Redcar.app)
|
|
163
|
+
e.doit = false
|
|
164
|
+
Redcar.app.events.create(:application_close, Redcar.app)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def add_swt_listeners
|
|
170
|
+
if Redcar.platform == :osx
|
|
171
|
+
quit_listener = Listener.new(:quit)
|
|
172
|
+
about_listener = Listener.new(:about)
|
|
173
|
+
prefs_listener = Listener.new(:prefs)
|
|
174
|
+
enhancer = com.redcareditor.application_swt.CocoaUIEnhancer.new("Redcar")
|
|
175
|
+
enhancer.hook_application_menu(
|
|
176
|
+
ApplicationSWT.display,
|
|
177
|
+
QuitListener.new,
|
|
178
|
+
about_listener,
|
|
179
|
+
prefs_listener
|
|
180
|
+
)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
105
184
|
def create_clipboard
|
|
106
185
|
ApplicationSWT::Clipboard.new(@model.clipboard)
|
|
107
186
|
end
|