redcar 0.8.1 → 0.9.0
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 +41 -1
- data/README.md +1 -1
- data/Rakefile +5 -6
- data/lib/plugin_manager/lib/plugin_manager.rb +1 -2
- data/lib/redcar.rb +19 -14
- data/lib/redcar/installer.rb +21 -17
- data/lib/redcar/runner.rb +10 -7
- data/lib/redcar/usage.rb +1 -0
- data/lib/redcar_quick_start.rb +8 -12
- data/lib/regex_replace.rb +3 -3
- data/plugins/application/features/step_definitions/menu_steps.rb +10 -0
- data/plugins/application/features/step_definitions/speedbar_steps.rb +8 -2
- data/plugins/application/features/step_definitions/tree_steps.rb +48 -6
- data/plugins/application/features/step_definitions/window_steps.rb +9 -4
- data/plugins/application/features/support/env.rb +20 -1
- data/plugins/application/features/support/fake_event.rb +14 -0
- data/plugins/application/lib/application.rb +29 -12
- data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +19 -0
- data/plugins/application/lib/application/speedbar.rb +23 -17
- data/plugins/application/lib/application/tab.rb +20 -15
- data/plugins/application/lib/application/treebook.rb +10 -7
- data/plugins/application/lib/application/window.rb +1 -1
- data/plugins/application/plugin.rb +1 -1
- data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +4 -4
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +15 -4
- data/plugins/application_swt/lib/application_swt/icon.rb +3 -5
- data/plugins/application_swt/lib/application_swt/notebook/tab_drag_and_drop_listener.rb +4 -4
- data/plugins/application_swt/lib/application_swt/notebook/tab_transfer.rb +5 -5
- data/plugins/application_swt/lib/application_swt/speedbar.rb +34 -120
- data/plugins/application_swt/lib/application_swt/speedbar/button_item.rb +20 -0
- data/plugins/application_swt/lib/application_swt/speedbar/combo_item.rb +38 -0
- data/plugins/application_swt/lib/application_swt/speedbar/label_item.rb +15 -0
- data/plugins/application_swt/lib/application_swt/speedbar/slider_item.rb +32 -0
- data/plugins/application_swt/lib/application_swt/speedbar/text_box_item.rb +36 -0
- data/plugins/application_swt/lib/application_swt/speedbar/toggle_item.rb +29 -0
- data/plugins/application_swt/lib/application_swt/tab.rb +1 -3
- data/plugins/application_swt/lib/application_swt/toolbar.rb +19 -20
- data/plugins/application_swt/lib/application_swt/treebook.rb +24 -9
- data/plugins/application_swt/lib/application_swt/window.rb +110 -98
- data/plugins/application_swt/lib/swt/vtab_folder.rb +77 -32
- data/plugins/application_swt/lib/swt/vtab_item.rb +9 -0
- data/plugins/application_swt/lib/swt/vtab_label.rb +63 -23
- data/plugins/application_swt/plugin.rb +1 -1
- data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +2 -2
- data/plugins/comment/features/line_comment.feature +116 -4
- data/plugins/comment/lib/comment.rb +18 -16
- data/plugins/connection_manager/lib/connection_manager/commands.rb +1 -1
- data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +5 -3
- data/plugins/declarations/lib/declarations.rb +1 -1
- data/plugins/declarations/lib/declarations/parser.rb +68 -20
- data/plugins/document_search/features/replace.feature +18 -0
- data/plugins/document_search/lib/document_search.rb +37 -54
- data/plugins/document_search/lib/document_search/replace_all_command.rb +27 -0
- data/plugins/document_search/lib/document_search/replace_command.rb +38 -0
- data/plugins/document_search/lib/document_search/replace_next_command.rb +27 -0
- data/plugins/document_search/lib/document_search/search_and_replace.rb +17 -24
- data/plugins/edit_view/features/step_definitions/editing_steps.rb +4 -4
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +9 -0
- data/plugins/edit_view/features/step_definitions/window_steps.rb +0 -12
- data/plugins/edit_view/lib/edit_view/document.rb +2 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +8 -8
- data/plugins/edit_view/lib/edit_view/edit_tab.rb +21 -7
- data/plugins/edit_view/lib/edit_view/select_font_dialog.rb +6 -0
- data/plugins/edit_view/lib/edit_view/select_theme_dialog.rb +6 -0
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +92 -43
- data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +17 -4
- data/plugins/find-in-project/lib/find_in_project.rb +1 -4
- data/plugins/find-in-project/lib/find_in_project/commands.rb +0 -14
- data/plugins/find-in-project/lib/find_in_project/controllers.rb +12 -0
- data/plugins/find-in-project/lib/find_in_project/views/index.html.erb +5 -0
- data/plugins/groovy/features/fixtures/test.groovy +0 -0
- data/plugins/groovy/features/step_definitions/groovy_steps.rb +27 -0
- data/plugins/groovy/features/support/env.rb +27 -0
- data/plugins/groovy/features/syntax_check_groovy.feature +72 -0
- data/plugins/groovy/lib/syntax_check/groovy.rb +76 -0
- data/plugins/groovy/plugin.rb +7 -0
- data/plugins/help/lib/help.rb +28 -4
- data/plugins/help/lib/help/help_tab.rb +11 -0
- data/plugins/help/lib/help/view_controller.rb +25 -0
- data/plugins/help/plugin.rb +2 -1
- data/plugins/{view_shortcuts → help}/views/default.css +0 -0
- data/plugins/{view_shortcuts → help}/views/index.html.erb +1 -1
- data/plugins/{view_shortcuts → help}/views/redcar_small_icon.png +0 -0
- data/plugins/html_view/features/browser_bar.feature +47 -0
- data/plugins/html_view/features/fixtures/other.html +1 -0
- data/plugins/html_view/features/fixtures/sample.html +1 -0
- data/plugins/html_view/features/step_definitions/html_view_steps.rb +45 -5
- data/plugins/html_view/features/support/env.rb +26 -0
- data/plugins/html_view/features/web_preview.feature +21 -0
- data/plugins/html_view/lib/html_controller.rb +5 -5
- data/plugins/html_view/lib/html_view.rb +62 -10
- data/plugins/{web_bookmarks/lib/web_bookmarks → html_view/lib/html_view}/browser_bar.rb +32 -20
- data/plugins/html_view/lib/html_view/commands.rb +64 -0
- data/plugins/{web_bookmarks/lib/web_bookmarks/view_controller.rb → html_view/lib/html_view/default_controller.rb} +7 -6
- data/plugins/html_view/lib/html_view/html_tab.rb +17 -6
- data/plugins/html_view/plugin.rb +3 -3
- data/plugins/{web_bookmarks → html_view}/views/index.html.erb +0 -0
- data/plugins/javascript/features/fixtures/test.js +0 -0
- data/plugins/javascript/features/support/env.rb +4 -0
- data/plugins/javascript/features/syntax_check_javascript.feature +27 -0
- data/plugins/javascript/lib/syntax_check/javascript.rb +52 -0
- data/plugins/javascript/plugin.rb +7 -0
- data/plugins/javascript/vendor/jslint.js +539 -0
- data/plugins/macros/lib/macros/commands.rb +3 -3
- data/plugins/open_default_app/lib/open_default_app.rb +29 -3
- data/plugins/open_default_app/plugin.rb +1 -1
- data/plugins/outline_view/features/outline_view.feature +79 -0
- data/plugins/outline_view/features/step_definitions/outline_steps.rb +45 -0
- data/plugins/outline_view/lib/outline_view.rb +1 -1
- data/plugins/outline_view/spec/fixtures/some_project/javascript.js +10 -0
- data/plugins/outline_view/spec/fixtures/some_project/nothing_to_see.rb +0 -0
- data/plugins/outline_view/spec/fixtures/some_project/one_lonely_class.rb +2 -0
- data/plugins/outline_view/spec/fixtures/some_project/similar_names.rb +18 -0
- data/plugins/outline_view/spec/fixtures/some_project/something_fancy.rb +736 -0
- data/plugins/outline_view/spec/fixtures/some_project/trailing_space.rb +5 -0
- data/plugins/outline_view_swt/lib/outline_view_swt.rb +17 -19
- data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +1 -4
- data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +12 -3
- data/plugins/project/features/close_directory_tree.feature +27 -0
- data/plugins/project/features/highlight_focussed_tab.feature +45 -1
- data/plugins/project/features/open_and_save_files.feature +33 -0
- data/plugins/project/features/open_directory_tree.feature +37 -11
- data/plugins/project/features/step_definitions/directory_steps.rb +1 -1
- data/plugins/project/features/step_definitions/drb_steps.rb +40 -0
- data/plugins/project/features/support/env.rb +17 -0
- data/plugins/project/lib/project.rb +12 -2
- data/plugins/project/lib/project/commands.rb +101 -99
- data/plugins/project/lib/project/drb_service.rb +55 -65
- data/plugins/project/lib/project/manager.rb +29 -4
- data/plugins/project/lib/project/project_tree_controller.rb +24 -0
- data/plugins/project/lib/project/support/trash.rb +1 -0
- data/plugins/redcar/redcar.rb +100 -37
- data/plugins/redcar_debug/lib/redcar_debug.rb +3 -3
- data/plugins/repl/features/step_definitions/repl_steps.rb +3 -0
- data/plugins/repl/lib/repl.rb +4 -11
- data/plugins/repl/lib/repl/repl_tab.rb +26 -0
- data/plugins/ruby/features/fixtures/test.rb +0 -0
- data/plugins/ruby/features/support/env.rb +4 -0
- data/plugins/ruby/features/syntax_check_ruby.feature +25 -0
- data/plugins/runnables/features/command_tree.feature +28 -0
- data/plugins/runnables/lib/runnables.rb +1 -0
- data/plugins/runnables/lib/runnables/commands.rb +4 -4
- data/plugins/runnables/lib/runnables/output_processor.rb +5 -5
- data/plugins/runnables/lib/runnables/tree_mirror/tree_controller.rb +2 -7
- data/plugins/runnables/lib/runnables/tree_mirror/tree_mirror.rb +13 -8
- data/plugins/scm_git/lib/scm_git/change.rb +5 -5
- data/plugins/strip_trailing_spaces/features/fixtures/test.txt +3 -0
- data/plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature +34 -0
- data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +3 -38
- data/plugins/swt/lib/swt.rb +5 -13
- data/plugins/swt/lib/swt/full_swt.rb +15 -13
- data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +7 -0
- data/plugins/syntax_check/lib/syntax_check.rb +21 -3
- data/plugins/syntax_check/lib/syntax_check/error.rb +4 -3
- data/plugins/task_manager/lib/task_manager.rb +1 -1
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ant.tmbundle/Preferences/Autocompletions.tmPreferences +345 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ant.tmbundle/Preferences/Symbol List Target.tmPreferences +22 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ant.tmbundle/Snippets/Doc Banner.tmSnippet +20 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ant.tmbundle/Syntaxes/Ant.tmLanguage +247 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ant.tmbundle/info.plist +55 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/RedcarRepl.tmbundle/Syntaxes/GroovyRepl.plist +40 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/RedcarRepl.tmbundle/info.plist +1 -1
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ruby Haml.tmbundle/Syntaxes/Ruby_Haml.tmLanguage +0 -1
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ruby Sass.tmbundle/Syntaxes/Ruby Sass.tmLanguage +626 -0
- data/plugins/textmate/vendor/redcar-bundles/Bundles/Ruby Sass.tmbundle/info.plist +16 -0
- data/plugins/todo_list/features/support/env.rb +8 -0
- data/plugins/todo_list/features/todo_list.feature +26 -0
- data/plugins/todo_list/lib/todo_list.rb +1 -0
- data/plugins/todo_list/lib/todo_list/file_parser.rb +23 -19
- data/plugins/todo_list/lib/todo_list/todo_controller.rb +60 -100
- data/plugins/todo_list/spec/fixtures/project/FIXME.file +3 -0
- data/plugins/todo_list/spec/fixtures/project/NOTE.ignored.file +1 -0
- data/plugins/todo_list/spec/fixtures/project/OPTIMIZE_colon.file +1 -0
- data/plugins/todo_list/spec/fixtures/project/XXX.ignored +1 -0
- data/plugins/todo_list/spec/fixtures/project/ignored_directory/TODO.file +2 -0
- data/plugins/todo_list/spec/fixtures/settings.rb +11 -0
- data/plugins/todo_list/spec/spec_helper.rb +6 -0
- data/plugins/todo_list/spec/todo_list/file_parser_spec.rb +35 -0
- data/plugins/tree/lib/tree.rb +1 -0
- data/plugins/tree/lib/tree/command.rb +5 -0
- data/plugins/web_bookmarks/features/bookmark.feature +37 -0
- data/plugins/web_bookmarks/features/fixtures/other.html +1 -0
- data/plugins/web_bookmarks/features/fixtures/sample.html +1 -0
- data/plugins/web_bookmarks/features/step_definitions/web_steps.rb +4 -0
- data/plugins/web_bookmarks/features/support/env.rb +26 -0
- data/plugins/web_bookmarks/lib/web_bookmarks.rb +0 -10
- data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +10 -1
- data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +1 -47
- data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +21 -14
- data/{plugins/application → share}/icons/close.png +0 -0
- data/{plugins/application → share}/icons/darwin-file.png +0 -0
- data/{plugins/application → share}/icons/darwin-folder.png +0 -0
- data/share/icons/open-source-flipped.png +0 -0
- data/{plugins/application/icons/redcar_icon_beta_dev.png → share/icons/redcar-icon-beta-dev.png} +0 -0
- data/{plugins/application/icons/redcar_icon_beta.png → share/icons/redcar-icon-beta.png} +0 -0
- data/{plugins/application → share}/icons/redcar-splash.png +0 -0
- metadata +90 -30
- data/lib/redcar/jvm_options_probe.rb +0 -33
- data/plugins/document_search/lib/document_search/replace.rb +0 -113
- data/plugins/document_search/lib/document_search/search.rb +0 -45
- data/plugins/outline_view_swt/lib/icons/alias.png +0 -0
- data/plugins/outline_view_swt/lib/icons/assignment.png +0 -0
- data/plugins/outline_view_swt/lib/icons/attribute.png +0 -0
- data/plugins/outline_view_swt/lib/icons/class.png +0 -0
- data/plugins/outline_view_swt/lib/icons/interface.png +0 -0
- data/plugins/outline_view_swt/lib/icons/method.png +0 -0
- data/plugins/strip_trailing_spaces/CHANGELOG +0 -12
- data/plugins/strip_trailing_spaces/README.md +0 -32
- data/plugins/view_shortcuts/lib/view_shortcuts.rb +0 -52
- data/plugins/view_shortcuts/plugin.rb +0 -11
|
@@ -4,7 +4,8 @@ module Swt
|
|
|
4
4
|
attr_accessor :tab_area, :content_area
|
|
5
5
|
attr_reader :selection_color_options, :font, :items
|
|
6
6
|
|
|
7
|
-
SelectionEvent
|
|
7
|
+
SelectionEvent = Struct.new("Event", :item, :doit)
|
|
8
|
+
CTabFolderEvent = SelectionEvent
|
|
8
9
|
|
|
9
10
|
def initialize(parent, style)
|
|
10
11
|
super(parent, style | Swt::SWT::BORDER)
|
|
@@ -17,6 +18,7 @@ module Swt
|
|
|
17
18
|
|
|
18
19
|
@items = []
|
|
19
20
|
@selection_listeners = []
|
|
21
|
+
@ctab_folder2_listeners = []
|
|
20
22
|
@font = Swt::Widgets::Display.current.system_font
|
|
21
23
|
|
|
22
24
|
@tab_area = Swt::Widgets::Composite.new(self, Swt::SWT::NONE).tap do |t|
|
|
@@ -43,15 +45,16 @@ module Swt
|
|
|
43
45
|
@items << tab
|
|
44
46
|
tab.draw_label(@tab_area)
|
|
45
47
|
tab.font = @font
|
|
46
|
-
|
|
48
|
+
selection = tab if @items.size == 1
|
|
47
49
|
layout
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
def remove_item(tab)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
return unless tab = ensure_tab(tab)
|
|
54
|
+
|
|
55
|
+
evt = create_ctab_folder_event(tab)
|
|
56
|
+
call_listeners(@ctab_folder2_listeners, evt, :method => :close, :run_blocks => true)
|
|
57
|
+
do_remove_item(tab) if evt.doit
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
def get_item(selector)
|
|
@@ -69,33 +72,12 @@ module Swt
|
|
|
69
72
|
end
|
|
70
73
|
|
|
71
74
|
def selection=(tab)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
e.item = tab
|
|
75
|
-
e.doit = true
|
|
76
|
-
end
|
|
77
|
-
@selection_listeners.each do |l|
|
|
78
|
-
if l.respond_to? :call
|
|
79
|
-
l[evt]
|
|
80
|
-
else
|
|
81
|
-
l.widgetSelected(evt)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
if evt.doit
|
|
85
|
-
silent_selection(tab)
|
|
86
|
-
end
|
|
87
|
-
end
|
|
75
|
+
tab = ensure_tab(tab)
|
|
76
|
+
return if tab.nil? or tab.active?
|
|
88
77
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if tab.respond_to? :to_int
|
|
93
|
-
@items[tab].active = true
|
|
94
|
-
else
|
|
95
|
-
tab.active = true
|
|
96
|
-
end
|
|
97
|
-
layout
|
|
98
|
-
@tab_area.layout
|
|
78
|
+
evt = create_selection_event(tab)
|
|
79
|
+
call_listeners(@selection_listeners, evt, :method => :widgetSelected, :run_blocks => true)
|
|
80
|
+
do_selection(tab) if evt.doit
|
|
99
81
|
end
|
|
100
82
|
|
|
101
83
|
def selection_index
|
|
@@ -110,16 +92,79 @@ module Swt
|
|
|
110
92
|
selection = tab
|
|
111
93
|
end
|
|
112
94
|
|
|
95
|
+
# Mirrors the selection-listener behaviour of CTabFolder.
|
|
96
|
+
# Additionally accepts a block as listener. If a block is passed,
|
|
97
|
+
# only widgetSelected events will be passed, not widgetDefaultSelected.
|
|
113
98
|
def add_selection_listener(listener = nil)
|
|
114
99
|
return @selection_listeners << listener if listener
|
|
115
100
|
raise ArgumentError, "Expected a listener or a block" unless block_given?
|
|
116
101
|
@selection_listeners << Proc.new
|
|
117
102
|
end
|
|
118
103
|
|
|
104
|
+
# Mirrors the CTabFolder2Listener behaviour of CTabFolder.
|
|
105
|
+
# You can also pass a a block as listener. Note that when you pass a
|
|
106
|
+
# block, only close events will be passed to it, not the minimize, maximize,
|
|
107
|
+
# restore or showList events.
|
|
108
|
+
def add_ctab_folder2_listener(listener = nil)
|
|
109
|
+
return @ctab_folder2_listeners << listener if listener
|
|
110
|
+
raise ArgumentError, "Expected a listener or a block" unless block_given?
|
|
111
|
+
@ctab_folder2_listeners << Proc.new
|
|
112
|
+
end
|
|
113
|
+
|
|
119
114
|
def font= swt_font
|
|
120
115
|
@font = swt_font
|
|
121
116
|
@items.each { |tab| tab.font = swt_font }
|
|
122
117
|
end
|
|
118
|
+
|
|
119
|
+
private
|
|
120
|
+
|
|
121
|
+
def ensure_tab(tab)
|
|
122
|
+
tab = @items[tab] if tab.respond_to? :to_int
|
|
123
|
+
tab
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def do_selection(tab)
|
|
127
|
+
selection.active = false if selection
|
|
128
|
+
tab.active = true
|
|
129
|
+
relayout!
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def do_remove_item(tab)
|
|
133
|
+
@items.delete(tab)
|
|
134
|
+
tab.dispose
|
|
135
|
+
selection = @items.first if tab.active?
|
|
136
|
+
relayout!
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def relayout!
|
|
140
|
+
layout
|
|
141
|
+
@tab_area.layout
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def create_selection_event(tab)
|
|
145
|
+
create_event(tab, SelectionEvent)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def create_ctab_folder_event(tab)
|
|
149
|
+
create_event(tab, CTabFolderEvent)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def create_event(tab, clazz)
|
|
153
|
+
clazz.new.tap do |e|
|
|
154
|
+
e.item = tab
|
|
155
|
+
e.doit = true
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def call_listeners(list, evt, hash)
|
|
160
|
+
list.each do |l|
|
|
161
|
+
if hash[:run_blocks] and l.respond_to? :call
|
|
162
|
+
l[evt]
|
|
163
|
+
else
|
|
164
|
+
l.send(hash[:method], evt)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
123
168
|
end
|
|
124
169
|
end
|
|
125
170
|
end
|
|
@@ -4,6 +4,7 @@ module Swt
|
|
|
4
4
|
module Widgets
|
|
5
5
|
class VTabItem
|
|
6
6
|
attr_accessor :text, :control
|
|
7
|
+
attr_reader :parent
|
|
7
8
|
|
|
8
9
|
def initialize(parent, style)
|
|
9
10
|
@parent = parent
|
|
@@ -60,6 +61,14 @@ module Swt
|
|
|
60
61
|
@label.font
|
|
61
62
|
end
|
|
62
63
|
|
|
64
|
+
def show_close= bool
|
|
65
|
+
@label.show_close = bool
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def show_close
|
|
69
|
+
@label.show_close
|
|
70
|
+
end
|
|
71
|
+
|
|
63
72
|
def dispose
|
|
64
73
|
@control.dispose
|
|
65
74
|
@label.dispose
|
|
@@ -3,10 +3,14 @@ require File.expand_path("../graphics_utils", __FILE__)
|
|
|
3
3
|
module Swt
|
|
4
4
|
module Widgets
|
|
5
5
|
class VTabLabel
|
|
6
|
-
attr_reader :active, :title
|
|
6
|
+
attr_reader :active, :title, :show_close
|
|
7
7
|
attr_accessor :font
|
|
8
8
|
|
|
9
9
|
include Swt::Events::MouseListener
|
|
10
|
+
include Swt::Events::MouseTrackListener
|
|
11
|
+
|
|
12
|
+
CLOSE_ICON = Redcar::ApplicationSWT::Icon.swt_image(:close)
|
|
13
|
+
ICON_PADDING = 3
|
|
10
14
|
|
|
11
15
|
def initialize(tab, parent, style)
|
|
12
16
|
@label = Swt::Widgets::Label.new(parent, style)
|
|
@@ -14,41 +18,56 @@ module Swt
|
|
|
14
18
|
@tab = tab
|
|
15
19
|
@parent = parent
|
|
16
20
|
@title = ""
|
|
21
|
+
@icon = nil
|
|
22
|
+
@show_close = false
|
|
17
23
|
|
|
18
24
|
@label.image = label_image
|
|
19
25
|
@label.add_paint_listener { |event| event.gc.draw_image(label_image, 0, 0) }
|
|
20
26
|
@label.add_mouse_listener(self)
|
|
27
|
+
self.show_close = true
|
|
21
28
|
end
|
|
22
29
|
|
|
23
30
|
def label_image
|
|
24
31
|
display = Swt::Widgets::Display.current
|
|
25
|
-
@img
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
unless @img
|
|
33
|
+
@img = GraphicsUtils.create_rotated_text(@title, @font, @parent.foreground, @parent.background, Swt::SWT::UP) do |gc, extent|
|
|
34
|
+
fg, bg = gc.foreground, gc.background
|
|
35
|
+
if @active
|
|
36
|
+
options = @tab.selection_color_options
|
|
37
|
+
options[:percents].each_with_index do |p, idx|
|
|
38
|
+
gc.foreground = options[:colors][idx]
|
|
39
|
+
gc.background = options[:colors][idx + 1]
|
|
40
|
+
if options[:vertical]
|
|
41
|
+
h = idx > 0 ? extent.height * options[:percents][idx - 1] : 0
|
|
42
|
+
gc.fill_gradient_rectangle(0, h, extent.width, extent.height * p, true)
|
|
43
|
+
else
|
|
44
|
+
h = idx > 0 ? extent.width * options[:percents][idx - 1] : 0
|
|
45
|
+
gc.fill_gradient_rectangle(w, 0, extent.width * p, extent.height, false)
|
|
46
|
+
end
|
|
39
47
|
end
|
|
48
|
+
else
|
|
49
|
+
gc.fill_rectangle(0, 0, extent.width, extent.height)
|
|
40
50
|
end
|
|
41
|
-
|
|
42
|
-
gc.
|
|
51
|
+
gc.foreground = display.get_system_color(Swt::SWT::COLOR_WIDGET_NORMAL_SHADOW)
|
|
52
|
+
gc.draw_rectangle(0, 0, extent.width - 1, extent.height - 1)
|
|
53
|
+
gc.foreground, gc.background = fg, bg
|
|
43
54
|
end
|
|
44
|
-
|
|
45
|
-
gc.draw_rectangle(0, 0, extent.width - 1, extent.height - 1)
|
|
46
|
-
gc.foreground, gc.background = fg, bg
|
|
55
|
+
overlay_icon(@icon, @img)
|
|
47
56
|
end
|
|
48
|
-
@dirty = false
|
|
49
57
|
@img
|
|
50
58
|
end
|
|
51
59
|
|
|
60
|
+
def overlay_icon(icon, image)
|
|
61
|
+
return unless icon
|
|
62
|
+
gc = GraphicsUtils::GC.new(image)
|
|
63
|
+
gc.draw_image(@icon, ICON_PADDING, ICON_PADDING)
|
|
64
|
+
gc.dispose
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def dirty!
|
|
68
|
+
@img = nil
|
|
69
|
+
end
|
|
70
|
+
|
|
52
71
|
def activate
|
|
53
72
|
@tab.activate
|
|
54
73
|
end
|
|
@@ -64,7 +83,7 @@ module Swt
|
|
|
64
83
|
end
|
|
65
84
|
|
|
66
85
|
def redraw
|
|
67
|
-
|
|
86
|
+
dirty!
|
|
68
87
|
@label.image = label_image
|
|
69
88
|
end
|
|
70
89
|
|
|
@@ -72,13 +91,34 @@ module Swt
|
|
|
72
91
|
@label.dispose
|
|
73
92
|
end
|
|
74
93
|
|
|
94
|
+
def show_close= boolean
|
|
95
|
+
return if @show_close == boolean
|
|
96
|
+
@show_close = boolean
|
|
97
|
+
@show_close ? @label.add_mouse_track_listener(self) : @label.remove_mouse_track_listener(self)
|
|
98
|
+
end
|
|
99
|
+
|
|
75
100
|
def mouseUp(e)
|
|
76
|
-
|
|
101
|
+
if show_close and CLOSE_ICON.bounds.contains(e.x - ICON_PADDING, e.y - ICON_PADDING)
|
|
102
|
+
@tab.parent.remove_item(@tab)
|
|
103
|
+
else
|
|
104
|
+
activate if e.button == 1
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def mouseEnter(e)
|
|
109
|
+
@icon = CLOSE_ICON
|
|
110
|
+
redraw
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def mouseExit(e)
|
|
114
|
+
@icon = nil
|
|
115
|
+
redraw
|
|
77
116
|
end
|
|
78
117
|
|
|
79
118
|
# Unused
|
|
80
119
|
def mouseDown(e); end
|
|
81
120
|
def mouseDoubleClick(e); end
|
|
121
|
+
def mouseHover(e); end
|
|
82
122
|
end
|
|
83
123
|
end
|
|
84
124
|
end
|
|
@@ -48,8 +48,8 @@ module Redcar
|
|
|
48
48
|
value = ""
|
|
49
49
|
r=0
|
|
50
50
|
l.to_s.each_line do |line|
|
|
51
|
-
value
|
|
52
|
-
value
|
|
51
|
+
value << line if r <= @line_limit - 1
|
|
52
|
+
value << "..." if r == @line_limit
|
|
53
53
|
r+=1
|
|
54
54
|
break if r > @line_limit - 1
|
|
55
55
|
end
|
|
@@ -60,6 +60,15 @@ Feature: Commenting lines by prefixing a comment string
|
|
|
60
60
|
When I toggle comment lines
|
|
61
61
|
Then the contents should be "# foo\n# bar\nbaz"
|
|
62
62
|
|
|
63
|
+
Scenario: Commenting when not all the lines begin with the comment symbol, reversed
|
|
64
|
+
When I replace the contents with "# foo\n# bar\nbaz"
|
|
65
|
+
And I switch the language to "Ruby"
|
|
66
|
+
And I select from 15 to 0
|
|
67
|
+
And I toggle comment lines
|
|
68
|
+
Then the contents should be "<c># # foo\n# # bar\n# baz<s>"
|
|
69
|
+
When I toggle comment lines
|
|
70
|
+
Then the contents should be "# foo\n# bar\nbaz"
|
|
71
|
+
|
|
63
72
|
Scenario: Commenting a single line with the cursor on the next line
|
|
64
73
|
When I replace the contents with "Two pieces\nof code"
|
|
65
74
|
And I switch the language to "Ruby"
|
|
@@ -69,6 +78,15 @@ Feature: Commenting lines by prefixing a comment string
|
|
|
69
78
|
When I toggle comment lines
|
|
70
79
|
Then the contents should be "<s>Two pieces\n<c>of code"
|
|
71
80
|
|
|
81
|
+
Scenario: Commenting a single line with the cursor on the next line, reversed
|
|
82
|
+
When I replace the contents with "Two pieces\nof code"
|
|
83
|
+
And I switch the language to "Ruby"
|
|
84
|
+
And I select from 11 to 0
|
|
85
|
+
And I toggle comment lines
|
|
86
|
+
Then the contents should be "<c># Two pieces\n<s>of code"
|
|
87
|
+
When I toggle comment lines
|
|
88
|
+
Then the contents should be "<c>Two pieces\n<s>of code"
|
|
89
|
+
|
|
72
90
|
Scenario: Commenting a single line with the cursor and selection point on the same line
|
|
73
91
|
When I replace the contents with "Two pieces\nof code"
|
|
74
92
|
And I switch the language to "Ruby"
|
|
@@ -104,6 +122,15 @@ Feature: Commenting lines by prefixing a comment string
|
|
|
104
122
|
When I toggle comment lines
|
|
105
123
|
Then the contents should be "Tw<s>o pieces\nof<c> code"
|
|
106
124
|
|
|
125
|
+
Scenario: Commenting several lines, not from the start of one of them, reversed
|
|
126
|
+
When I replace the contents with "Two pieces\nof code"
|
|
127
|
+
And I switch the language to "Ruby"
|
|
128
|
+
And I select from 13 to 2
|
|
129
|
+
And I toggle comment lines
|
|
130
|
+
Then the contents should be "Tw<c># o pieces\n# of<s> code"
|
|
131
|
+
When I toggle comment lines
|
|
132
|
+
Then the contents should be "Tw<c>o pieces\nof<s> code"
|
|
133
|
+
|
|
107
134
|
Scenario: Commenting several lines, not from the start of one of them
|
|
108
135
|
When I replace the contents with " foo\n bar"
|
|
109
136
|
And I switch the language to "Ruby"
|
|
@@ -121,12 +148,97 @@ Feature: Commenting lines by prefixing a comment string
|
|
|
121
148
|
Then the contents should be "<s># def foo\n# dfo\n# sdfj\n# asdf\n# as<c>df"
|
|
122
149
|
|
|
123
150
|
Scenario: Commenting several indented lines, beginning before the text starts
|
|
124
|
-
|
|
151
|
+
Given the content is:
|
|
152
|
+
"""
|
|
153
|
+
<s> def foo
|
|
154
|
+
dfo<c>
|
|
155
|
+
"""
|
|
125
156
|
And I switch the language to "Ruby"
|
|
126
|
-
And I select from 2 to 25
|
|
127
157
|
And I toggle comment lines
|
|
128
|
-
Then the
|
|
129
|
-
|
|
158
|
+
Then the content should be:
|
|
159
|
+
"""
|
|
160
|
+
<s> # def foo
|
|
161
|
+
# dfo<c>
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
Scenario: Commenting several indented lines, beginning before the text starts, reversed
|
|
165
|
+
Given the content is:
|
|
166
|
+
"""
|
|
167
|
+
<c> def foo
|
|
168
|
+
dfo<s>
|
|
169
|
+
"""
|
|
170
|
+
And I switch the language to "Ruby"
|
|
171
|
+
And I toggle comment lines
|
|
172
|
+
Then the content should be:
|
|
173
|
+
"""
|
|
174
|
+
<c> # def foo
|
|
175
|
+
# dfo<s>
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
Scenario: Commenting several indented lines, beginning where the text starts
|
|
179
|
+
Given the content is:
|
|
180
|
+
"""
|
|
181
|
+
<s>def foo
|
|
182
|
+
dfo<c>
|
|
183
|
+
"""
|
|
184
|
+
And I switch the language to "Ruby"
|
|
185
|
+
And I toggle comment lines
|
|
186
|
+
Then the content should be:
|
|
187
|
+
"""
|
|
188
|
+
<s># def foo
|
|
189
|
+
# dfo<c>
|
|
190
|
+
"""
|
|
191
|
+
And I toggle comment lines
|
|
192
|
+
Then the content should be:
|
|
193
|
+
"""
|
|
194
|
+
<s>def foo
|
|
195
|
+
dfo<c>
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
Scenario: Commenting several indented lines, with a whitespace only line in between
|
|
199
|
+
Given the content is:
|
|
200
|
+
"""
|
|
201
|
+
<s>doc.compound do
|
|
202
|
+
all_lines_are_already_commented = true
|
|
203
|
+
start_line_comment_offset = nil
|
|
204
|
+
insertion_column = 1000
|
|
205
|
+
|
|
206
|
+
<c>(start_line..end_line).each do |line|
|
|
207
|
+
"""
|
|
208
|
+
And I switch the language to "Ruby"
|
|
209
|
+
And I toggle comment lines
|
|
210
|
+
Then the content should be:
|
|
211
|
+
"""
|
|
212
|
+
<s># doc.compound do
|
|
213
|
+
# all_lines_are_already_commented = true
|
|
214
|
+
# start_line_comment_offset = nil
|
|
215
|
+
# insertion_column = 1000
|
|
216
|
+
#
|
|
217
|
+
# <c>(start_line..end_line).each do |line|
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
Scenario: Commenting several indented lines, with a blank line in between
|
|
221
|
+
Given the content is:
|
|
222
|
+
"""
|
|
223
|
+
<s>doc.compound do
|
|
224
|
+
all_lines_are_already_commented = true
|
|
225
|
+
start_line_comment_offset = nil
|
|
226
|
+
insertion_column = 1000
|
|
227
|
+
|
|
228
|
+
<c>(start_line..end_line).each do |line|
|
|
229
|
+
"""
|
|
230
|
+
And I switch the language to "Ruby"
|
|
231
|
+
And I toggle comment lines
|
|
232
|
+
Then the content should be:
|
|
233
|
+
"""
|
|
234
|
+
<s># doc.compound do
|
|
235
|
+
# all_lines_are_already_commented = true
|
|
236
|
+
# start_line_comment_offset = nil
|
|
237
|
+
# insertion_column = 1000
|
|
238
|
+
#
|
|
239
|
+
# <c>(start_line..end_line).each do |line|
|
|
240
|
+
"""
|
|
241
|
+
|
|
130
242
|
# This is pretty damn marginal, and I'm tired...
|
|
131
243
|
#Scenario: Commenting several lines, with mismatched indentation, beginning in the middle
|
|
132
244
|
# When I replace the contents with " def foo\n dfo\n sdfj\n asdf\nasdf"
|