redcar-dev 0.12.27dev → 0.13.0dev
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 +10 -1
- data/lib/redcar.rb +2 -2
- data/plugins/application/lib/application.rb +2 -2
- data/plugins/application/lib/application/dialog.rb +1 -1
- data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +13 -5
- data/plugins/application/lib/application/global_state.rb +21 -0
- data/plugins/application/lib/application/menu/item.rb +16 -7
- data/plugins/application/lib/application/updates.rb +20 -3
- data/plugins/application/spec/application/updates_spec.rb +53 -0
- data/plugins/application_swt/lib/application_swt.rb +1 -1
- data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +35 -10
- data/plugins/application_swt/lib/application_swt/menu.rb +31 -5
- data/plugins/declarations/lib/declarations.rb +31 -65
- data/plugins/declarations/lib/declarations/commands.rb +147 -0
- data/plugins/declarations/lib/declarations/file.rb +1 -1
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/javascript.js +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/nothing_to_see.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/one_lonely_class.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/similar_names.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/something_fancy.rb +0 -0
- data/plugins/{outline_view → declarations}/spec/fixtures/some_project/trailing_space.rb +0 -0
- data/plugins/edit_view/lib/edit_view.rb +35 -2
- data/plugins/edit_view/lib/edit_view/commands/change_language_command.rb +31 -0
- data/plugins/edit_view/lib/edit_view/commands/language_settings_commands.rb +45 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +1 -1
- data/plugins/project/lib/project/find_file_dialog.rb +20 -18
- data/plugins/project/lib/project/manager.rb +5 -3
- data/plugins/redcar/plugin.rb +1 -2
- data/plugins/redcar/redcar.rb +34 -42
- data/plugins/scm/lib/scm.rb +1 -1
- data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +2 -2
- data/plugins/syntax_check/lib/syntax_check.rb +2 -2
- metadata +946 -956
- data/plugins/edit_view/lib/edit_view/info_speedbar.rb +0 -98
- data/plugins/outline_view/features/outline_view.feature +0 -79
- data/plugins/outline_view/features/project_outline.feature +0 -23
- data/plugins/outline_view/features/step_definitions/outline_steps.rb +0 -61
- data/plugins/outline_view/lib/outline_view.rb +0 -97
- data/plugins/outline_view/lib/outline_view/commands.rb +0 -19
- data/plugins/outline_view/plugin.rb +0 -10
- data/plugins/outline_view_swt/lib/outline_view_swt.rb +0 -79
- data/plugins/outline_view_swt/plugin.rb +0 -7
data/CHANGES
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
Version 0.
|
1
|
+
Version 0.13 (TBA)
|
2
2
|
==================
|
3
3
|
|
4
|
+
* Move all language settings options into the Edit menu, for easier discoverability.(Dan Lucraft)
|
5
|
+
* Move the change tab language command into the Edit menu, and make it a filter list. (Dan Lucraft)
|
6
|
+
|
7
|
+
|
8
|
+
Version 0.12 (7th January 2012)
|
9
|
+
===============================
|
10
|
+
|
4
11
|
* Features run all the way through again, and use Swtbot in places to
|
5
12
|
allow us to simulate events more accurately (Helpful for macros) (Dan Lucraft)
|
6
13
|
* Added --no-splash option (Dan Lucraft)
|
@@ -21,9 +28,11 @@ Version 0.12 (TBA)
|
|
21
28
|
* Added option to color tree background color via ApplicationSWT preferences (Delisa Mason)
|
22
29
|
* Project tree has colourful icons (Delisa Mason)
|
23
30
|
* Uses gems to install everything (Dan Lucraft)
|
31
|
+
* Uses Bundler to manage dependencies in development (Dan Lucraft)
|
24
32
|
* Wildcards permitted in project search (Delisa Mason)
|
25
33
|
* Installation entirely through Rubygems (Dan Lucraft)
|
26
34
|
* Rad new icon (Delisa Mason)
|
35
|
+
* Checks for updates and displays if there is a new version in the Help menu (Dan Lucraft)
|
27
36
|
|
28
37
|
Version 0.11 (23 March 2011)
|
29
38
|
============================
|
data/lib/redcar.rb
CHANGED
@@ -68,9 +68,9 @@ end
|
|
68
68
|
#
|
69
69
|
# and so on.
|
70
70
|
module Redcar
|
71
|
-
VERSION = '0.
|
71
|
+
VERSION = '0.13.0dev' # also change in the gemspec!
|
72
72
|
VERSION_MAJOR = 0
|
73
|
-
VERSION_MINOR =
|
73
|
+
VERSION_MINOR = 13
|
74
74
|
VERSION_RELEASE = 0
|
75
75
|
|
76
76
|
ENVIRONMENTS = [:user, :debug, :test]
|
@@ -12,6 +12,7 @@ require 'application/dialog'
|
|
12
12
|
require 'application/dialogs/filter_list_dialog'
|
13
13
|
require 'application/dialogs/modeless_list_dialog'
|
14
14
|
require 'application/event_spewer'
|
15
|
+
require 'application/global_state'
|
15
16
|
require 'application/keymap'
|
16
17
|
require 'application/keymap/builder'
|
17
18
|
require 'application/toolbar'
|
@@ -152,7 +153,6 @@ module Redcar
|
|
152
153
|
|
153
154
|
# Create a new Application::Window, and the controller for it.
|
154
155
|
def new_window(show=true)
|
155
|
-
s = Time.now
|
156
156
|
new_window = Window.new
|
157
157
|
windows << new_window
|
158
158
|
notify_listeners(:new_window, new_window)
|
@@ -198,7 +198,7 @@ module Redcar
|
|
198
198
|
@storage ||= begin
|
199
199
|
storage = Plugin::Storage.new('application_plugin')
|
200
200
|
storage.set_default('stay_resident_after_last_window_closed', false)
|
201
|
-
storage.set_default('show_toolbar',
|
201
|
+
storage.set_default('show_toolbar', Redcar.platform != :osx)
|
202
202
|
storage.set_default('instance_id', java.util.UUID.randomUUID.to_s)
|
203
203
|
storage.set_default('should_check_for_updates', true)
|
204
204
|
storage
|
@@ -84,7 +84,7 @@ module Redcar
|
|
84
84
|
#
|
85
85
|
# The return value is a hash containing :button and :value.
|
86
86
|
def self.input(title, message, initial_value="", &validator)
|
87
|
-
in_dialog { Redcar.gui.dialog_adapter.input(title, message, initial_value, &validator) }
|
87
|
+
in_dialog { Redcar.gui.dialog_adapter.input(title.to_s, message.to_s, initial_value.to_s, &validator) }
|
88
88
|
end
|
89
89
|
|
90
90
|
# Show a dialog containing a password entry box to the user, and blocks
|
@@ -20,10 +20,18 @@ module Redcar
|
|
20
20
|
notify_listeners(:close)
|
21
21
|
end
|
22
22
|
|
23
|
-
# Called by the controller when the user changes the filter.
|
23
|
+
# Called by the controller when the user changes the filter.
|
24
|
+
#
|
25
|
+
# Should return either a list of strings, or a list of hashes, which must have at least
|
26
|
+
# the key :name set, and may also have the key :image.
|
27
|
+
#
|
28
|
+
# E.g. it returns ["feed.rb", "application_controller.rb"]
|
29
|
+
# or it returns [{:name => "feed.rb"}, {:name => "application_controller.rb"}]
|
30
|
+
#
|
31
|
+
# The methods selected and moved_to will be called with items from this list.
|
24
32
|
#
|
25
33
|
# @param [String] the filter entered by the user
|
26
|
-
# @return [Array<String>] the new list to display
|
34
|
+
# @return [Array<String> or Array<Hash>] the new list to display
|
27
35
|
def update_list(filter)
|
28
36
|
if filter == ""
|
29
37
|
%w(foo bar baz qux quux corge)
|
@@ -36,9 +44,9 @@ module Redcar
|
|
36
44
|
|
37
45
|
# Called by the controller when the user selects a row in the list.
|
38
46
|
#
|
39
|
-
# @param [String] the
|
47
|
+
# @param [String or Hash] the item selected by the user
|
40
48
|
# @param [Integer] the index of the row in the list selected by the user
|
41
|
-
def selected(
|
49
|
+
def selected(item, ix)
|
42
50
|
puts "Hooray! You selected #{text} at index #{ix}"
|
43
51
|
end
|
44
52
|
|
@@ -46,7 +54,7 @@ module Redcar
|
|
46
54
|
#
|
47
55
|
# @param [String] the list row text that is now highlighted
|
48
56
|
# @param [Integer] the index of the row that is now highlighted
|
49
|
-
def moved_to(
|
57
|
+
def moved_to(item, ix)
|
50
58
|
# Override with the code you wish you had
|
51
59
|
end
|
52
60
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Redcar
|
2
|
+
class Application
|
3
|
+
class GlobalState
|
4
|
+
def app
|
5
|
+
Redcar.app
|
6
|
+
end
|
7
|
+
|
8
|
+
def win
|
9
|
+
app and app.focussed_window
|
10
|
+
end
|
11
|
+
|
12
|
+
def project
|
13
|
+
win and Project.in_window(win)
|
14
|
+
end
|
15
|
+
|
16
|
+
def tab
|
17
|
+
win and win.focussed_notebook_tab
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -12,7 +12,7 @@ module Redcar
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
attr_reader :command, :priority, :value, :type
|
15
|
+
attr_reader :command, :priority, :value, :type
|
16
16
|
|
17
17
|
# Create a new Item, with the given text to display in the menu, and
|
18
18
|
# either:
|
@@ -26,10 +26,9 @@ module Redcar
|
|
26
26
|
@priority = options[:priority]
|
27
27
|
@value = options[:value]
|
28
28
|
@type = options[:type]
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# FIXME: Should this be removed at some point?
|
29
|
+
if [:check, :radio].include?(@type)
|
30
|
+
@checked = options[:checked]
|
31
|
+
end
|
33
32
|
else
|
34
33
|
@command = options || block
|
35
34
|
end
|
@@ -55,11 +54,13 @@ module Redcar
|
|
55
54
|
end
|
56
55
|
|
57
56
|
def text
|
58
|
-
@text.
|
57
|
+
@text.respond_to?(:call) ?
|
58
|
+
Redcar::Application::GlobalState.new.instance_eval(&@text) :
|
59
|
+
@text
|
59
60
|
end
|
60
61
|
|
61
62
|
def lazy_text?
|
62
|
-
@text.
|
63
|
+
@text.respond_to?(:call)
|
63
64
|
end
|
64
65
|
|
65
66
|
def merge(other)
|
@@ -74,6 +75,14 @@ module Redcar
|
|
74
75
|
def is_unique?
|
75
76
|
false
|
76
77
|
end
|
78
|
+
|
79
|
+
def checked?
|
80
|
+
@checked and (
|
81
|
+
@checked.respond_to?(:call) ?
|
82
|
+
Redcar::Application::GlobalState.new.instance_eval(&@checked) :
|
83
|
+
@checked
|
84
|
+
)
|
85
|
+
end
|
77
86
|
end
|
78
87
|
end
|
79
88
|
end
|
@@ -31,12 +31,29 @@ module Redcar
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.latest_version
|
34
|
-
@latest_version ||= Net::HTTP.get(URI.parse(
|
34
|
+
@latest_version ||= Net::HTTP.get(URI.parse(latest_version_url)).strip
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.latest_version_url
|
38
|
+
"http://s3.amazonaws.com/redcar2/current_version.txt?instance_id=#{Application.instance_id}&version=#{Redcar::VERSION}"
|
35
39
|
end
|
36
40
|
|
37
41
|
def self.newer_version?
|
38
|
-
latest_version_bits = latest_version.split(".").map(&:to_i)
|
39
|
-
|
42
|
+
latest_version_bits = latest_version.chomp.split(".").map(&:to_i)
|
43
|
+
newer_than?(latest_version_bits, [Redcar::VERSION_MAJOR, Redcar::VERSION_MINOR, Redcar::VERSION_RELEASE])
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.newer_than?(new_bits, old_bits)
|
47
|
+
# if they are not the same length, pad with 0's to make comparison
|
48
|
+
# valid. E.g. 0.10.0 == 0.10
|
49
|
+
if new_bits.length > old_bits.length
|
50
|
+
old_bits += [0]*(new_bits.length - old_bits.length)
|
51
|
+
elsif old_bits.length > new_bits.length
|
52
|
+
new_bits += [0]*(old_bits.length - new_bits.length)
|
53
|
+
end
|
54
|
+
|
55
|
+
return false if new_bits == old_bits
|
56
|
+
[new_bits, old_bits].sort.last == new_bits
|
40
57
|
end
|
41
58
|
|
42
59
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Redcar::Application::Updates do
|
5
|
+
|
6
|
+
describe "comparing versions logic" do
|
7
|
+
|
8
|
+
it "0.10 = 0.10" do
|
9
|
+
Redcar::Application::Updates.newer_than?([0, 10], [0, 10]).should be_false
|
10
|
+
end
|
11
|
+
|
12
|
+
it "0.10.0 = 0.10" do
|
13
|
+
Redcar::Application::Updates.newer_than?([0, 10, 0], [0, 10]).should be_false
|
14
|
+
end
|
15
|
+
|
16
|
+
it "0.10 = 0.10.0" do
|
17
|
+
Redcar::Application::Updates.newer_than?([0, 10], [0, 10, 0]).should be_false
|
18
|
+
end
|
19
|
+
|
20
|
+
it "0.10.1 > 0.10" do
|
21
|
+
Redcar::Application::Updates.newer_than?([0, 10, 1], [0, 10]).should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "0.11 > 0.10" do
|
25
|
+
Redcar::Application::Updates.newer_than?([0, 11], [0, 10]).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "0.11.1 > 0.10" do
|
29
|
+
Redcar::Application::Updates.newer_than?([0, 11, 1], [0, 10]).should be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "0.11 > 0.10.1" do
|
33
|
+
Redcar::Application::Updates.newer_than?([0, 11], [0, 10, 1]).should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "0.11.1 > 0.10.1" do
|
37
|
+
Redcar::Application::Updates.newer_than?([0, 11, 1], [0, 10, 1]).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "0.9 < 0.10" do
|
41
|
+
Redcar::Application::Updates.newer_than?([0, 9], [0, 10]).should be_false
|
42
|
+
end
|
43
|
+
|
44
|
+
it "0.9.1 < 0.10" do
|
45
|
+
Redcar::Application::Updates.newer_than?([0, 9, 1], [0, 10]).should be_false
|
46
|
+
end
|
47
|
+
|
48
|
+
it "0.9 < 0.10.1" do
|
49
|
+
Redcar::Application::Updates.newer_than?([0, 9], [0, 10, 1]).should be_false
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -13,8 +13,8 @@ require "application_swt/dialogs/modeless_dialog"
|
|
13
13
|
require "application_swt/dialogs/modeless_html_dialog"
|
14
14
|
require "application_swt/dialogs/modeless_list_dialog_controller"
|
15
15
|
require "application_swt/gradient"
|
16
|
-
require "application_swt/html_tab"
|
17
16
|
require "application_swt/icon"
|
17
|
+
require "application_swt/html_tab"
|
18
18
|
require "application_swt/listener_helpers"
|
19
19
|
require "application_swt/menu"
|
20
20
|
require "application_swt/menu/binding_translator"
|
@@ -14,20 +14,33 @@ module Redcar
|
|
14
14
|
attr_accessor :controller
|
15
15
|
|
16
16
|
def createDialogArea(parent)
|
17
|
+
# composite = Swt::Widgets::Composite.new(parent, Swt::SWT::NONE)
|
18
|
+
# layout = Swt::Layout::RowLayout.new(Swt::SWT::VERTICAL)
|
19
|
+
# composite.setLayout(layout)
|
20
|
+
#
|
21
|
+
# @text = Swt::Widgets::Text.new(composite, Swt::SWT::SINGLE | Swt::SWT::LEFT | Swt::SWT::ICON_CANCEL | Swt::SWT::SEARCH)
|
22
|
+
# @text.set_layout_data(Swt::Layout::RowData.new(400, 20))
|
23
|
+
# @list = Swt::Widgets::List.new(composite, Swt::SWT::V_SCROLL | Swt::SWT::H_SCROLL | Swt::SWT::SINGLE)
|
24
|
+
# @list.set_layout_data(Swt::Layout::RowData.new(400, 200))
|
25
|
+
# controller.attach_listeners
|
26
|
+
# controller.update_list_sync
|
27
|
+
# get_shell.add_shell_listener(ShellListener.new(controller))
|
28
|
+
# ApplicationSWT.register_shell(get_shell)
|
29
|
+
# ApplicationSWT.register_dialog(get_shell, self)
|
30
|
+
#
|
31
|
+
# @list.set_selection(0)
|
17
32
|
composite = Swt::Widgets::Composite.new(parent, Swt::SWT::NONE)
|
18
33
|
layout = Swt::Layout::RowLayout.new(Swt::SWT::VERTICAL)
|
19
34
|
composite.setLayout(layout)
|
20
|
-
|
21
35
|
@text = Swt::Widgets::Text.new(composite, Swt::SWT::SINGLE | Swt::SWT::LEFT | Swt::SWT::ICON_CANCEL | Swt::SWT::SEARCH)
|
22
36
|
@text.set_layout_data(Swt::Layout::RowData.new(400, 20))
|
23
|
-
@list = Swt::Widgets::
|
37
|
+
@list = Swt::Widgets::Table.new(composite, Swt::SWT::V_SCROLL | Swt::SWT::H_SCROLL | Swt::SWT::MULTI)
|
24
38
|
@list.set_layout_data(Swt::Layout::RowData.new(400, 200))
|
25
39
|
controller.attach_listeners
|
26
40
|
controller.update_list_sync
|
27
41
|
get_shell.add_shell_listener(ShellListener.new(controller))
|
28
|
-
ApplicationSWT.register_shell(get_shell)
|
29
|
-
ApplicationSWT.register_dialog(get_shell, self)
|
30
|
-
|
42
|
+
Redcar::ApplicationSWT.register_shell(get_shell)
|
43
|
+
Redcar::ApplicationSWT.register_dialog(get_shell, self)
|
31
44
|
@list.set_selection(0)
|
32
45
|
end
|
33
46
|
end
|
@@ -167,7 +180,8 @@ module Redcar
|
|
167
180
|
|
168
181
|
def widget_selected
|
169
182
|
if @model.step?
|
170
|
-
|
183
|
+
ix = @dialog.list.get_selection_index
|
184
|
+
@model.moved_to(@list[ix], ix)
|
171
185
|
end
|
172
186
|
end
|
173
187
|
|
@@ -185,7 +199,8 @@ module Redcar
|
|
185
199
|
|
186
200
|
def selected
|
187
201
|
wait_for_search if select_closest_match?
|
188
|
-
|
202
|
+
ix = @dialog.list.get_selection_index
|
203
|
+
@model.selected(@list[ix], ix)
|
189
204
|
end
|
190
205
|
|
191
206
|
def key_pressed(key_event)
|
@@ -221,10 +236,20 @@ module Redcar
|
|
221
236
|
end
|
222
237
|
|
223
238
|
def populate_list(contents)
|
239
|
+
@list = contents
|
224
240
|
if @dialog
|
225
|
-
@dialog.list.
|
226
|
-
contents.each do |
|
227
|
-
|
241
|
+
@dialog.list.remove_all
|
242
|
+
contents.each do |props|
|
243
|
+
if props.is_a?(String)
|
244
|
+
props = {:name => props}
|
245
|
+
end
|
246
|
+
props = {:name => ""}.merge(props)
|
247
|
+
item = Swt::Widgets::TableItem.new(@dialog.list, Swt::SWT::NONE)
|
248
|
+
item.text = props[:name]
|
249
|
+
image = ApplicationSWT::Icon.swt_image(props[:icon]) if props[:icon]
|
250
|
+
if image
|
251
|
+
item.image = image
|
252
|
+
end
|
228
253
|
end
|
229
254
|
end
|
230
255
|
end
|
@@ -31,11 +31,13 @@ module Redcar
|
|
31
31
|
@keymap = keymap
|
32
32
|
@menu_bar = Swt::Widgets::Menu.new(window.shell, type)
|
33
33
|
@menu_bar.set_visible(false)
|
34
|
+
|
34
35
|
return unless menu_model
|
35
36
|
@handlers = []
|
36
37
|
@use_numbers = options[:numbers]
|
37
38
|
@number = 1
|
38
|
-
|
39
|
+
|
40
|
+
add_entries_to_menu(@menu_bar, nil, menu_model)
|
39
41
|
#puts "ApplicationSWT::Menu initialize took #{Time.now - s}s"
|
40
42
|
end
|
41
43
|
|
@@ -59,7 +61,26 @@ module Redcar
|
|
59
61
|
@use_numbers
|
60
62
|
end
|
61
63
|
|
62
|
-
|
64
|
+
class MenuListener
|
65
|
+
attr_reader :items
|
66
|
+
|
67
|
+
def initialize
|
68
|
+
@items = []
|
69
|
+
end
|
70
|
+
|
71
|
+
def menu_shown(e)
|
72
|
+
items.each do |item, entry|
|
73
|
+
if entry.type == :check
|
74
|
+
item.setSelection(entry.checked?)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def menu_hidden(e)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_entries_to_menu(menu, menu_listener, menu_model)
|
63
84
|
menu_model.each do |entry|
|
64
85
|
if entry.is_a?(Redcar::Menu::LazyMenu)
|
65
86
|
menu_header = Swt::Widgets::MenuItem.new(menu, Swt::SWT::CASCADE)
|
@@ -68,7 +89,7 @@ module Redcar
|
|
68
89
|
menu_header.menu = new_menu
|
69
90
|
menu_header.add_arm_listener do
|
70
91
|
new_menu.get_items.each {|i| i.dispose }
|
71
|
-
add_entries_to_menu(new_menu, entry)
|
92
|
+
add_entries_to_menu(new_menu, nil, entry)
|
72
93
|
end
|
73
94
|
elsif entry.is_a?(Redcar::Menu)
|
74
95
|
menu_header = Swt::Widgets::MenuItem.new(menu, Swt::SWT::CASCADE)
|
@@ -76,7 +97,9 @@ module Redcar
|
|
76
97
|
new_menu = Swt::Widgets::Menu.new(menu)
|
77
98
|
menu_header.menu = new_menu
|
78
99
|
menu_header.enabled = (entry.length > 0)
|
79
|
-
|
100
|
+
new_menu_listener = MenuListener.new
|
101
|
+
add_entries_to_menu(new_menu, new_menu_listener, entry)
|
102
|
+
new_menu.add_menu_listener(new_menu_listener)
|
80
103
|
menu_header.add_arm_listener do
|
81
104
|
entry.entries.zip(new_menu.get_items) do |sub_entry, swt_item|
|
82
105
|
if sub_entry.lazy_text?
|
@@ -88,12 +111,15 @@ module Redcar
|
|
88
111
|
item = Swt::Widgets::MenuItem.new(menu, Swt::SWT::SEPARATOR)
|
89
112
|
elsif entry.is_a?(Redcar::Menu::Item)
|
90
113
|
item = Swt::Widgets::MenuItem.new(menu, Menu.types[entry.type] || Swt::SWT::PUSH)
|
91
|
-
item.setSelection(entry.active)
|
92
114
|
if entry.command.is_a?(Proc)
|
93
115
|
connect_proc_to_item(item, entry)
|
94
116
|
else
|
95
117
|
connect_command_to_item(item, entry)
|
96
118
|
end
|
119
|
+
if [:check, :radio].include? entry.type
|
120
|
+
menu_listener.items << [item, entry] if menu_listener
|
121
|
+
item.setSelection(entry.checked?)
|
122
|
+
end
|
97
123
|
else
|
98
124
|
raise "unknown object of type #{entry.class} in menu"
|
99
125
|
end
|