redcar 0.12.1 → 0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/CHANGES +18 -0
  2. data/bin/redcar +1 -0
  3. data/lib/redcar.rb +4 -5
  4. data/lib/redcar/usage.rb +0 -1
  5. data/lib/redcar_quick_start.rb +3 -1
  6. data/plugins/application/lib/application.rb +1 -0
  7. data/plugins/application/lib/application/commands/treebook_commands.rb +11 -18
  8. data/plugins/application/lib/application/dialog.rb +1 -1
  9. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +13 -5
  10. data/plugins/application/lib/application/global_state.rb +21 -0
  11. data/plugins/application/lib/application/menu/item.rb +37 -11
  12. data/plugins/application/lib/application/notebook.rb +12 -0
  13. data/plugins/application/lib/application/tree/mirror.rb +0 -11
  14. data/plugins/application/lib/application/window.rb +32 -7
  15. data/plugins/application_swt/lib/application_swt.rb +1 -1
  16. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +35 -10
  17. data/plugins/application_swt/lib/application_swt/icon.rb +1 -1
  18. data/plugins/application_swt/lib/application_swt/menu.rb +47 -15
  19. data/plugins/application_swt/lib/application_swt/notebook.rb +11 -2
  20. data/plugins/application_swt/lib/application_swt/window.rb +37 -34
  21. data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +1 -1
  22. data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +9 -0
  23. data/plugins/declarations/lib/declarations.rb +31 -66
  24. data/plugins/declarations/lib/declarations/commands.rb +142 -0
  25. data/plugins/declarations/lib/declarations/file.rb +1 -1
  26. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/javascript.js +0 -0
  27. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/nothing_to_see.rb +0 -0
  28. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/one_lonely_class.rb +0 -0
  29. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/similar_names.rb +0 -0
  30. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/something_fancy.rb +0 -0
  31. data/plugins/{outline_view → declarations}/spec/fixtures/some_project/trailing_space.rb +0 -0
  32. data/plugins/edit_view/lib/edit_view.rb +35 -2
  33. data/plugins/edit_view/lib/edit_view/commands/change_language_command.rb +31 -0
  34. data/plugins/edit_view/lib/edit_view/commands/language_settings_commands.rb +45 -0
  35. data/plugins/edit_view/lib/edit_view/document/command.rb +1 -1
  36. data/plugins/edit_view/lib/edit_view/edit_tab.rb +11 -13
  37. data/plugins/key_bindings/lib/key_bindings.rb +6 -2
  38. data/plugins/project/lib/project.rb +27 -32
  39. data/plugins/project/lib/project/commands.rb +3 -88
  40. data/plugins/project/lib/project/dir_controller.rb +12 -18
  41. data/plugins/project/lib/project/dir_mirror.rb +20 -25
  42. data/plugins/project/lib/project/file_mirror.rb +10 -10
  43. data/plugins/project/lib/project/find_file_dialog.rb +20 -18
  44. data/plugins/project/lib/project/find_recent_dialog.rb +6 -3
  45. data/plugins/project/lib/project/{adapters/local.rb → local_filesystem.rb} +35 -35
  46. data/plugins/project/lib/project/manager.rb +21 -75
  47. data/plugins/project/lib/project/sub_project.rb +3 -3
  48. data/plugins/project/plugin.rb +0 -1
  49. data/plugins/project_search/lib/project_search/lucene_refresh.rb +0 -1
  50. data/plugins/redcar/plugin.rb +2 -2
  51. data/plugins/redcar/redcar.rb +34 -42
  52. data/plugins/ruby/lib/ruby/syntax_checker.rb +27 -7
  53. data/plugins/scm/lib/scm.rb +1 -12
  54. data/plugins/sessions/lib/sessions.rb +22 -0
  55. data/plugins/sessions/lib/sessions/cursor_saver.rb +162 -0
  56. data/plugins/sessions/lib/sessions/loader.rb +99 -0
  57. data/plugins/sessions/lib/sessions/memory.rb +59 -0
  58. data/plugins/sessions/plugin.rb +8 -0
  59. data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +2 -2
  60. data/plugins/syntax_check/lib/syntax_check.rb +2 -2
  61. data/plugins/tree_view_swt/lib/tree_view_swt.rb +1 -3
  62. data/redcar.gemspec +1 -1
  63. metadata +195 -291
  64. data/plugins/connection_manager/lib/connection_manager.rb +0 -57
  65. data/plugins/connection_manager/lib/connection_manager/commands.rb +0 -14
  66. data/plugins/connection_manager/lib/connection_manager/connection_store.rb +0 -87
  67. data/plugins/connection_manager/lib/connection_manager/controller.rb +0 -100
  68. data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +0 -38
  69. data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +0 -93
  70. data/plugins/connection_manager/plugin.rb +0 -12
  71. data/plugins/connection_manager/views/index.html.erb +0 -284
  72. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +0 -98
  73. data/plugins/outline_view/features/outline_view.feature +0 -79
  74. data/plugins/outline_view/features/project_outline.feature +0 -23
  75. data/plugins/outline_view/features/step_definitions/outline_steps.rb +0 -61
  76. data/plugins/outline_view/lib/outline_view.rb +0 -97
  77. data/plugins/outline_view/lib/outline_view/commands.rb +0 -19
  78. data/plugins/outline_view/plugin.rb +0 -10
  79. data/plugins/outline_view_swt/lib/outline_view_swt.rb +0 -79
  80. data/plugins/outline_view_swt/plugin.rb +0 -7
  81. data/plugins/project/lib/project/adapters/remote.rb +0 -96
  82. data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +0 -93
  83. data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +0 -94
  84. data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +0 -181
data/CHANGES CHANGED
@@ -1,3 +1,21 @@
1
+ Version 0.13 (21st January 2012)
2
+ ================================
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
+ * extended the FilterListDialog class to support icons, by merging in the outline_view plugin (Dan Lucraft)
7
+ * implemented project-wide Find declaration (Project/Find declaration) (Dan Lucraft)
8
+ * Don't use Bundler when running as a gem (Dan Lucraft)
9
+ * Parse Ruby with 1.9 syntax instead of 1.8 (Dan Lucraft)
10
+ * Made the auto indenter ignore blank lines when deciding on indentation. (Dan Lucraft)
11
+ * New API for tab context menus (Dan Lucraft)
12
+ * Copy path of file to clipboard tab context menu item (Dan Lucraft)
13
+ * New APIs on Window to get and set window location, size and tree width (Dan Lucraft)
14
+ * Remember project window location and size, and tree width between sessions (Markus Kahl)
15
+ * Remember open files between sessions (Christopher Wade)
16
+ * Remember cursor location and selection between sessions (Christopher Wade)
17
+ * Remove broken remote project support, and clean up Project classes. (Dan Lucraft)
18
+
1
19
  Version 0.12 (7th January 2012)
2
20
  ===============================
3
21
 
data/bin/redcar CHANGED
@@ -9,6 +9,7 @@ file = File.readlink(file) while File.symlink?(file)
9
9
  $LOAD_PATH.unshift File.expand_path('../../lib', file)
10
10
 
11
11
  require "redcar_quick_start"
12
+
12
13
  if ARGV.include? '--silent'
13
14
  # reopen the standard pipes to nothingness if we were forked as part of jruby
14
15
  STDIN.reopen Redcar.null_device
@@ -23,8 +23,7 @@ entries_in_gem_home = Dir[prospective_gem_home + "/*"].map {|path| File.basenam
23
23
  if (["cache", "gems"] - entries_in_gem_home).length == 0
24
24
  ENV["GEM_HOME"] = prospective_gem_home
25
25
  else
26
- require 'bundler'
27
- Bundler.require(:default)
26
+ require 'bundler/setup'
28
27
  end
29
28
 
30
29
  require 'redcar-icons'
@@ -70,10 +69,10 @@ end
70
69
  #
71
70
  # and so on.
72
71
  module Redcar
73
- VERSION = '0.12.1' # also change in the gemspec!
72
+ VERSION = '0.13' # also change in the gemspec!
74
73
  VERSION_MAJOR = 0
75
- VERSION_MINOR = 12
76
- VERSION_RELEASE = 1
74
+ VERSION_MINOR = 13
75
+ VERSION_RELEASE = 0
77
76
 
78
77
  ENVIRONMENTS = [:user, :debug, :test]
79
78
 
@@ -9,7 +9,6 @@ module Redcar
9
9
 
10
10
  def version_requested
11
11
  if ARGV.include?("-v")
12
- puts "Redcar #{Redcar::VERSION}"
13
12
  exit
14
13
  end
15
14
  end
@@ -33,7 +33,9 @@ module Redcar
33
33
  end
34
34
 
35
35
  def self.try_to_load_via_drb
36
- return if ARGV.find {|arg| arg == "--multiple-instance" || arg == '--help' || arg == '-h'}
36
+ if ARGV.find {|arg| arg == "--multiple-instance" || arg == '--help' || arg == '-h' || arg == "-v"}
37
+ return false
38
+ end
37
39
  begin
38
40
  begin
39
41
  TCPSocket.new('127.0.0.1', drb_port).close
@@ -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'
@@ -42,32 +42,25 @@ module Redcar
42
42
  end
43
43
 
44
44
  class TreebookWidthCommand < Command
45
+ MINIMUM_TREEBOOK_WIDTH = 0
46
+ WIDTH_INCREMENT = 5
45
47
  sensitize :open_trees
46
-
47
- def increment
48
- raise "Please implement me!"
49
- end
50
-
51
- def execute
52
- if win = Redcar.app.focussed_window
53
- if increment > 0
54
- win.adjust_treebook_width(true)
55
- else
56
- win.adjust_treebook_width(false)
57
- end
58
- end
59
- end
60
48
  end
61
49
 
62
50
  class IncreaseTreebookWidthCommand < TreebookWidthCommand
63
- def increment
64
- 1
51
+ def execute
52
+ win = Redcar.app.focussed_window
53
+ win.treebook_width = win.treebook_width + WIDTH_INCREMENT
65
54
  end
66
55
  end
67
56
 
68
57
  class DecreaseTreebookWidthCommand < TreebookWidthCommand
69
- def decrement
70
- -1
58
+ def execute
59
+ win = Redcar.app.focussed_window
60
+ new_width = win.treebook_width - WIDTH_INCREMENT
61
+ unless new_width < MINIMUM_TREEBOOK_WIDTH
62
+ win.treebook_width = new_width
63
+ end
71
64
  end
72
65
  end
73
66
 
@@ -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 list row text selected by the user
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(text, ix)
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(text, ix)
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,26 +12,38 @@ module Redcar
12
12
  end
13
13
  end
14
14
 
15
- attr_reader :command, :priority, :value, :type, :active
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:
19
19
  # the Redcar::Command that is run when the item is selected.
20
20
  # or a block to run when the item is selected
21
- def initialize(text, options={}, &block)
21
+ #
22
+ # Instead of a command, a hash of options may be passed:
23
+ # :command - specify a command class
24
+ # :priority - Integer, higher means lower in menus
25
+ # :value - if passed, the command class with be instantiation like:
26
+ # Command.new(:value => value)
27
+ # :enabled - if set to false, this menu item will be permanently disabled
28
+ # :type - can be set to :check or :radio
29
+ # :checked - if type is check or radio, a block that will be run when
30
+ # the menu is displayed to determine whether this item is checked
31
+ def initialize(text, command_or_options={}, &block)
22
32
  @text = text
23
33
 
24
- if options.respond_to?('[]')
34
+ if command_or_options.respond_to?('[]')
35
+ options = command_or_options
25
36
  @command = options[:command] || block
26
37
  @priority = options[:priority]
27
38
  @value = options[:value]
28
39
  @type = options[:type]
29
- @active = options[:active] ? true : false
30
- # This branch is for compatibility with old code. Please use :command
31
- # option in new code
32
- # FIXME: Should this be removed at some point?
40
+ @enabled = (options.key?(:enabled) ? options[:enabled] : true)
41
+ if [:check, :radio].include?(@type)
42
+ @checked = options[:checked]
43
+ end
33
44
  else
34
- @command = options || block
45
+ @enabled = true
46
+ @command = command_or_options || block
35
47
  end
36
48
 
37
49
  @priority ||= Menu::DEFAULT_PRIORITY
@@ -42,7 +54,7 @@ module Redcar
42
54
  if @value
43
55
  @command.new.run(:value => @value)
44
56
  else
45
- @command.new.run#(:with_key => with_key)
57
+ @command.new.run
46
58
  end
47
59
  end
48
60
 
@@ -55,11 +67,13 @@ module Redcar
55
67
  end
56
68
 
57
69
  def text
58
- @text.is_a?(Proc) ? @text.call : @text
70
+ @text.respond_to?(:call) ?
71
+ Redcar::Application::GlobalState.new.instance_eval(&@text) :
72
+ @text
59
73
  end
60
74
 
61
75
  def lazy_text?
62
- @text.is_a?(Proc)
76
+ @text.respond_to?(:call)
63
77
  end
64
78
 
65
79
  def merge(other)
@@ -74,6 +88,18 @@ module Redcar
74
88
  def is_unique?
75
89
  false
76
90
  end
91
+
92
+ def enabled?
93
+ @enabled
94
+ end
95
+
96
+ def checked?
97
+ @checked and (
98
+ @checked.respond_to?(:call) ?
99
+ Redcar::Application::GlobalState.new.instance_eval(&@checked) :
100
+ @checked
101
+ )
102
+ end
77
103
  end
78
104
  end
79
105
  end
@@ -132,6 +132,18 @@ module Redcar
132
132
  end
133
133
  index
134
134
  end
135
+
136
+ # Triggers the display of the tab context menu at the current
137
+ # cursor location.
138
+ def right_click_on_tab(tab)
139
+ menu = Menu.new
140
+ Redcar.plugin_manager.objects_implementing(:tab_context_menu).each do |object|
141
+ menu.merge(object.tab_context_menu(tab))
142
+ end
143
+
144
+ Application::Dialog.popup_menu(menu, :pointer)
145
+ end
146
+
135
147
 
136
148
  def inspect
137
149
  "#<Redcar::Notebook #{object_id}>"
@@ -78,17 +78,6 @@ module Redcar
78
78
  raise "not implemented"
79
79
  end
80
80
 
81
- # Called when the whole tree needs to be refreshed. Implementations
82
- # should do whatever they need to do to fetch full tree data, and then
83
- # yield.
84
- #
85
- # The purpose is so that a refresh operation can run against some cached
86
- # data, but then at the end of the method the mirror can discard the cache.
87
- # Because refreshes typically generate large numbers of queries.
88
- def refresh_operation(tree)
89
- yield
90
- end
91
-
92
81
  # This is the required interface of a ROW in a TreeView.
93
82
  module NodeMirror
94
83
  include Redcar::Observable
@@ -63,7 +63,7 @@ module Redcar
63
63
  def fullscreen=(value)
64
64
  controller.fullscreen = value
65
65
  end
66
-
66
+
67
67
  # Create a new notebook in this window.
68
68
  #
69
69
  # @events [(:new_notebook, notebook)]
@@ -82,14 +82,39 @@ module Redcar
82
82
  notify_listeners(:enlarge_notebook,index)
83
83
  end
84
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)
85
+ # The width of a treebook in this window. (Even if there is none
86
+ # this is the width it would be.)
87
+ def treebook_width
88
+ if controller
89
+ controller.treebook_open_width
90
90
  end
91
91
  end
92
-
92
+
93
+ # Set treebook width (does not reopen a hidden tree)
94
+ def treebook_width=(size)
95
+ if controller
96
+ controller.set_treebook_open_width(size)
97
+ end
98
+ end
99
+
100
+ # Get dimensions and location of this window
101
+ #
102
+ # Returns: [x, y, width, height]
103
+ def bounds
104
+ if controller
105
+ controller.bounds
106
+ end
107
+ end
108
+
109
+ # Set bounds of this window
110
+ #
111
+ # @dimensions [x, y, width, height]
112
+ def bounds=(new_bounds)
113
+ if controller
114
+ controller.set_bounds(new_bounds)
115
+ end
116
+ end
117
+
93
118
  def reset_notebook_widths
94
119
  notify_listeners(:reset_notebook_widths)
95
120
  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::List.new(composite, Swt::SWT::V_SCROLL | Swt::SWT::H_SCROLL | Swt::SWT::SINGLE)
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
- @model.moved_to(@dialog.list.get_selection.first, @dialog.list.get_selection_index)
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
- @model.selected(@dialog.list.get_selection.first, @dialog.list.get_selection_index)
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.removeAll
226
- contents.each do |text|
227
- @dialog.list.add(text)
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