redcar 0.3.6 → 0.3.7
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 +24 -0
- data/Rakefile +85 -2
- data/lib/json/CHANGES +166 -0
- data/lib/json/COPYING +58 -0
- data/lib/json/GPL +340 -0
- data/lib/json/README +358 -0
- data/lib/json/Rakefile +292 -0
- data/lib/json/TODO +1 -0
- data/lib/json/VERSION +1 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
- data/lib/json/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
- data/lib/json/benchmarks/generator2_benchmark.rb +222 -0
- data/lib/json/benchmarks/generator_benchmark.rb +224 -0
- data/lib/json/benchmarks/ohai.json +1216 -0
- data/lib/json/benchmarks/ohai.ruby +1 -0
- data/lib/json/benchmarks/parser2_benchmark.rb +251 -0
- data/lib/json/benchmarks/parser_benchmark.rb +259 -0
- data/lib/json/bin/edit_json.rb +9 -0
- data/lib/json/bin/prettify_json.rb +75 -0
- data/lib/json/data/example.json +1 -0
- data/lib/json/data/index.html +38 -0
- data/lib/json/data/prototype.js +4184 -0
- data/lib/json/ext/json/ext/generator/extconf.rb +16 -0
- data/lib/json/ext/json/ext/generator/generator.c +1323 -0
- data/lib/json/ext/json/ext/generator/generator.h +170 -0
- data/lib/json/ext/json/ext/parser/extconf.rb +15 -0
- data/lib/json/ext/json/ext/parser/parser.c +1935 -0
- data/lib/json/ext/json/ext/parser/parser.h +71 -0
- data/lib/json/ext/json/ext/parser/parser.rl +792 -0
- data/lib/json/install.rb +26 -0
- data/lib/json/lib/json.rb +10 -0
- data/lib/json/lib/json/Array.xpm +21 -0
- data/lib/json/lib/json/FalseClass.xpm +21 -0
- data/lib/json/lib/json/Hash.xpm +21 -0
- data/lib/json/lib/json/Key.xpm +73 -0
- data/lib/json/lib/json/NilClass.xpm +21 -0
- data/lib/json/lib/json/Numeric.xpm +28 -0
- data/lib/json/lib/json/String.xpm +96 -0
- data/lib/json/lib/json/TrueClass.xpm +21 -0
- data/lib/json/lib/json/add/core.rb +148 -0
- data/lib/json/lib/json/add/rails.rb +58 -0
- data/lib/json/lib/json/common.rb +397 -0
- data/lib/json/lib/json/editor.rb +1371 -0
- data/lib/json/lib/json/ext.rb +15 -0
- data/lib/json/lib/json/json.xpm +1499 -0
- data/lib/json/lib/json/pure.rb +77 -0
- data/lib/json/lib/json/pure/generator.rb +452 -0
- data/lib/json/lib/json/pure/parser.rb +307 -0
- data/lib/json/lib/json/version.rb +8 -0
- data/lib/json/tests/fixtures/fail1.json +1 -0
- data/lib/json/tests/fixtures/fail10.json +1 -0
- data/lib/json/tests/fixtures/fail11.json +1 -0
- data/lib/json/tests/fixtures/fail12.json +1 -0
- data/lib/json/tests/fixtures/fail13.json +1 -0
- data/lib/json/tests/fixtures/fail14.json +1 -0
- data/lib/json/tests/fixtures/fail18.json +1 -0
- data/lib/json/tests/fixtures/fail19.json +1 -0
- data/lib/json/tests/fixtures/fail2.json +1 -0
- data/lib/json/tests/fixtures/fail20.json +1 -0
- data/lib/json/tests/fixtures/fail21.json +1 -0
- data/lib/json/tests/fixtures/fail22.json +1 -0
- data/lib/json/tests/fixtures/fail23.json +1 -0
- data/lib/json/tests/fixtures/fail24.json +1 -0
- data/lib/json/tests/fixtures/fail25.json +1 -0
- data/lib/json/tests/fixtures/fail27.json +2 -0
- data/lib/json/tests/fixtures/fail28.json +2 -0
- data/lib/json/tests/fixtures/fail3.json +1 -0
- data/lib/json/tests/fixtures/fail4.json +1 -0
- data/lib/json/tests/fixtures/fail5.json +1 -0
- data/lib/json/tests/fixtures/fail6.json +1 -0
- data/lib/json/tests/fixtures/fail7.json +1 -0
- data/lib/json/tests/fixtures/fail8.json +1 -0
- data/lib/json/tests/fixtures/fail9.json +1 -0
- data/lib/json/tests/fixtures/pass1.json +56 -0
- data/lib/json/tests/fixtures/pass15.json +1 -0
- data/lib/json/tests/fixtures/pass16.json +1 -0
- data/lib/json/tests/fixtures/pass17.json +1 -0
- data/lib/json/tests/fixtures/pass2.json +1 -0
- data/lib/json/tests/fixtures/pass26.json +1 -0
- data/lib/json/tests/fixtures/pass3.json +6 -0
- data/lib/json/tests/test_json.rb +361 -0
- data/lib/json/tests/test_json_addition.rb +162 -0
- data/lib/json/tests/test_json_encoding.rb +68 -0
- data/lib/json/tests/test_json_fixtures.rb +34 -0
- data/lib/json/tests/test_json_generate.rb +122 -0
- data/lib/json/tests/test_json_rails.rb +144 -0
- data/lib/json/tests/test_json_unicode.rb +76 -0
- data/lib/json/tools/fuzz.rb +139 -0
- data/lib/json/tools/server.rb +61 -0
- data/lib/redcar.rb +5 -3
- data/lib/redcar/runner.rb +1 -5
- data/lib/redcar_quick_start.rb +2 -7
- data/plugins/application/features/support/env.rb +6 -1
- data/plugins/application/lib/application/command/history.rb +5 -0
- data/plugins/application/lib/application/dialog.rb +1 -1
- data/plugins/application_swt/lib/application_swt.rb +0 -1
- data/plugins/application_swt/lib/application_swt/html_tab.rb +4 -2
- data/plugins/application_swt/lib/application_swt/menu.rb +3 -1
- data/plugins/application_swt/lib/application_swt/swt_wrapper.rb +4 -0
- data/plugins/core/lib/core.rb +1 -0
- data/plugins/core/lib/core/has_spi.rb +10 -0
- data/plugins/edit_view/features/new_tab.feature +0 -1
- data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
- data/plugins/edit_view/lib/edit_view.rb +13 -0
- data/plugins/edit_view/lib/edit_view/document/command.rb +1 -1
- data/plugins/edit_view_swt/lib/edit_view_swt.rb +4 -0
- data/plugins/html_view/assets/redcar.css +2 -1
- data/plugins/html_view/lib/html_view.rb +19 -6
- data/plugins/html_view/lib/html_view/html_tab.rb +2 -2
- data/plugins/project/lib/project.rb +11 -0
- data/plugins/project/lib/project/dir_controller.rb +252 -2
- data/plugins/project/lib/project/dir_mirror.rb +53 -5
- data/plugins/project/lib/project/manager.rb +5 -1
- data/plugins/project/views/bulk_rename.html.erb +162 -0
- data/plugins/redcar/redcar.rb +22 -2
- data/plugins/runnables/icons/cog.png +0 -0
- data/plugins/runnables/lib/runnables.rb +99 -0
- data/plugins/runnables/plugin_no_load.rb +9 -0
- data/plugins/tree/lib/tree.rb +61 -0
- data/plugins/tree/lib/tree/controller.rb +53 -4
- data/plugins/tree/lib/tree/mirror.rb +56 -16
- data/plugins/tree_view_swt/lib/tree_view_swt.rb +250 -24
- metadata +2700 -2604
- data/plugins/application_swt/lib/application_swt/notebook/drag_and_drop_listener.rb +0 -71
|
@@ -1,44 +1,84 @@
|
|
|
1
1
|
|
|
2
2
|
module Redcar
|
|
3
3
|
class Tree
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# Events: changed
|
|
4
|
+
|
|
5
|
+
# SPI specification. Implement a class including this module and
|
|
6
|
+
# pass an instance to Tree#new to populate the contents of a Tree.
|
|
9
7
|
module Mirror
|
|
10
8
|
include Redcar::Observable
|
|
11
9
|
|
|
12
|
-
# Return the title of the
|
|
10
|
+
# Return the title of the tree.
|
|
13
11
|
#
|
|
14
12
|
# @return [String]
|
|
15
13
|
def title
|
|
16
|
-
|
|
14
|
+
"Tree"
|
|
17
15
|
end
|
|
18
16
|
|
|
19
|
-
# Return the top entries in the Tree.
|
|
17
|
+
# Return the top level entries in the Tree. Each element should
|
|
18
|
+
# be an instance of a class implementing Redcar::Tree::Mirror::NodeMirror
|
|
20
19
|
#
|
|
21
20
|
# @return [Array<NodeMirror>]
|
|
22
21
|
def top
|
|
23
|
-
|
|
22
|
+
[]
|
|
24
23
|
end
|
|
25
24
|
|
|
26
|
-
# Does the resource still exist
|
|
25
|
+
# Does the resource still exist
|
|
27
26
|
#
|
|
28
27
|
# @return [Boolean]
|
|
29
28
|
def exist?
|
|
30
|
-
|
|
29
|
+
true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# What type of data does the tree contain? If Node#to_data returns an
|
|
33
|
+
# absolute path to a file, then :file may be specified for OS integration.
|
|
34
|
+
#
|
|
35
|
+
# @return [Symbol] either :file or :text
|
|
36
|
+
def data_type
|
|
37
|
+
:text
|
|
31
38
|
end
|
|
32
39
|
|
|
33
40
|
# Has the top nodes changed since the last time `top`
|
|
34
|
-
#
|
|
41
|
+
# was called?
|
|
35
42
|
#
|
|
36
43
|
# @return [Boolean]
|
|
37
44
|
def changed?
|
|
45
|
+
false
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Should drag and drop be permitted?
|
|
49
|
+
#
|
|
50
|
+
# @return [Boolean]
|
|
51
|
+
def drag_and_drop?
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Create a node from the data created by to_data. This is the reverse
|
|
56
|
+
# operation to #to_data, and should turn the String (in case data_type
|
|
57
|
+
# if :text) or Array of Strings (in case data_type is :file) into an
|
|
58
|
+
# array of nodes
|
|
59
|
+
#
|
|
60
|
+
# @return [NodeMirror]
|
|
61
|
+
def from_data(data)
|
|
62
|
+
raise "not implemented"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# This must be implemented (along with a from_data method)
|
|
66
|
+
# in order to allow drag and drop and copy and paste within the tree.
|
|
67
|
+
#
|
|
68
|
+
# If the Tree::Mirror data_type is :text (the default), this must
|
|
69
|
+
# return a String. The string should be a *complete* representation
|
|
70
|
+
# of the data in the nodes, so that the from_data method can turn the
|
|
71
|
+
# string back into nodes
|
|
72
|
+
#
|
|
73
|
+
# If the Tree::Mirror data_type is :file, this must return an
|
|
74
|
+
# array of Strings, where each string is the absolute path to the file.
|
|
75
|
+
#
|
|
76
|
+
# @return [String or Array<String>]
|
|
77
|
+
def to_data(nodes)
|
|
38
78
|
raise "not implemented"
|
|
39
79
|
end
|
|
40
80
|
|
|
41
|
-
# This is the
|
|
81
|
+
# This is the required interface of a ROW in a TreeView.
|
|
42
82
|
module NodeMirror
|
|
43
83
|
include Redcar::Observable
|
|
44
84
|
|
|
@@ -51,14 +91,14 @@ module Redcar
|
|
|
51
91
|
|
|
52
92
|
# Which icon to show next to the text
|
|
53
93
|
def icon
|
|
54
|
-
|
|
94
|
+
nil
|
|
55
95
|
end
|
|
56
96
|
|
|
57
97
|
# This node's children
|
|
58
98
|
#
|
|
59
99
|
# @return [Array<NodeMirror>]
|
|
60
100
|
def children
|
|
61
|
-
|
|
101
|
+
[]
|
|
62
102
|
end
|
|
63
103
|
|
|
64
104
|
# Whether this node is a leaf node or not (different to whether or
|
|
@@ -66,7 +106,7 @@ module Redcar
|
|
|
66
106
|
#
|
|
67
107
|
# @return [Boolean]
|
|
68
108
|
def leaf?
|
|
69
|
-
|
|
109
|
+
true
|
|
70
110
|
end
|
|
71
111
|
end
|
|
72
112
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
module Redcar
|
|
3
3
|
class TreeViewSWT
|
|
4
|
-
attr_reader :viewer
|
|
4
|
+
attr_reader :viewer, :model
|
|
5
5
|
|
|
6
6
|
def self.storage
|
|
7
7
|
@storage ||= begin
|
|
@@ -10,11 +10,11 @@ module Redcar
|
|
|
10
10
|
storage
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
|
-
|
|
14
13
|
|
|
15
14
|
def initialize(composite, model)
|
|
16
15
|
@composite, @model = composite, model
|
|
17
|
-
|
|
16
|
+
tree_style = Swt::SWT::VIRTUAL | Swt::SWT::MULTI
|
|
17
|
+
@viewer = JFace::Viewers::TreeViewer.new(@composite, tree_style)
|
|
18
18
|
@viewer.set_content_provider(TreeMirrorContentProvider.new)
|
|
19
19
|
@viewer.set_input(@model.tree_mirror)
|
|
20
20
|
@viewer.set_label_provider(TreeMirrorLabelProvider.new)
|
|
@@ -22,32 +22,230 @@ module Redcar
|
|
|
22
22
|
if @model.tree_controller
|
|
23
23
|
@viewer.add_tree_listener(@viewer.getControl, TreeListener.new)
|
|
24
24
|
@viewer.add_double_click_listener(DoubleClickListener.new)
|
|
25
|
-
@viewer.add_open_listener(OpenListener.new(@model
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
@viewer.add_open_listener(OpenListener.new(@model))
|
|
26
|
+
control.add_mouse_listener(MouseListener.new(self))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register_dnd if @model.tree_mirror.drag_and_drop?
|
|
30
|
+
|
|
31
|
+
@model.add_listener(:refresh) { @viewer.refresh }
|
|
32
|
+
|
|
33
|
+
@editor = Swt::Custom::TreeEditor.new(control)
|
|
34
|
+
|
|
35
|
+
@editor.horizontalAlignment = Swt::SWT::LEFT
|
|
36
|
+
@editor.grabHorizontal = true
|
|
37
|
+
|
|
38
|
+
@model.add_listener(:edit_element, &method(:edit_element))
|
|
39
|
+
@model.add_listener(:expand_element, &method(:expand_element))
|
|
40
|
+
@model.add_listener(:select_element, &method(:select_element))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class DragSourceListener
|
|
44
|
+
attr_reader :tree, :dragged_elements
|
|
45
|
+
|
|
46
|
+
def initialize(tree_view_swt, tree)
|
|
47
|
+
@tree_view_swt = tree_view_swt
|
|
48
|
+
@tree = tree
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def drag_start(event)
|
|
52
|
+
selection = tree.get_selection
|
|
53
|
+
if selection.length > 0
|
|
54
|
+
event.doit = true
|
|
55
|
+
@dragged_elements = selection.map do |item|
|
|
56
|
+
@tree_view_swt.item_to_element(item)
|
|
57
|
+
end
|
|
58
|
+
Redcar.safely do
|
|
59
|
+
@tree_view_swt.drag_controller.drag_start(@dragged_elements)
|
|
60
|
+
end
|
|
61
|
+
else
|
|
62
|
+
event.doit = false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def drag_set_data(event)
|
|
67
|
+
case tree_mirror.data_type
|
|
68
|
+
when :file
|
|
69
|
+
Redcar.safely do
|
|
70
|
+
@data = tree_mirror.to_data(dragged_elements).to_java(:string)
|
|
71
|
+
end
|
|
72
|
+
event.data = @data
|
|
73
|
+
when :text
|
|
74
|
+
Redcar.safely do
|
|
75
|
+
@data = tree_mirror.to_data(dragged_elements)
|
|
76
|
+
end
|
|
77
|
+
event.data = @data
|
|
78
|
+
else
|
|
79
|
+
raise "unknown tree data_type #{tree.tree_mirror.data_type}"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def drag_finished(*_); end
|
|
84
|
+
|
|
85
|
+
def tree_mirror
|
|
86
|
+
@tree_view_swt.model.tree_mirror
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
class DropAdapter < JFace::Viewers::ViewerDropAdapter
|
|
91
|
+
def initialize(tree_view_swt, drag_source_listener, viewer)
|
|
92
|
+
@tree_view_swt = tree_view_swt
|
|
93
|
+
@drag_source_listener = drag_source_listener
|
|
94
|
+
super(viewer)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def validateDrop(target, operation, transfer_data_type)
|
|
98
|
+
pos = location_to_position(get_current_location)
|
|
99
|
+
Redcar.safely do
|
|
100
|
+
@tree_view_swt.drag_controller.can_drop?(@drag_source_listener.dragged_elements, target, pos)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def performDrop(data)
|
|
105
|
+
elements = data.to_a.map {|datum| @tree_view_swt.model.tree_mirror.from_data(datum) }
|
|
106
|
+
pos = location_to_position(get_current_location)
|
|
107
|
+
Redcar.safely do
|
|
108
|
+
@tree_view_swt.drag_controller.do_drop(elements, get_current_target, pos)
|
|
109
|
+
end
|
|
110
|
+
true
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def location_to_position(location)
|
|
116
|
+
if Redcar.safely { @tree_view_swt.drag_controller.reorderable? }
|
|
117
|
+
{1 => :before, 2 => :after, 3 => :onto}[location]
|
|
118
|
+
else
|
|
119
|
+
:onto
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def register_dnd
|
|
125
|
+
case Redcar.safely { @model.tree_mirror.data_type }
|
|
126
|
+
when :file
|
|
127
|
+
types = [Swt::DND::FileTransfer.getInstance()].to_java(:"org.eclipse.swt.dnd.FileTransfer")
|
|
128
|
+
when :text
|
|
129
|
+
types = [Swt::DND::TextTransfer.getInstance()].to_java(:"org.eclipse.swt.dnd.TextTransfer")
|
|
130
|
+
else
|
|
131
|
+
raise "unknown tree data_type #{Redcar.safely { tree.tree_mirror.data_type }}"
|
|
132
|
+
end
|
|
133
|
+
operations = Swt::DND::DND::DROP_MOVE | Swt::DND::DND::DROP_COPY
|
|
134
|
+
|
|
135
|
+
source_listener = DragSourceListener.new(self, @viewer.get_tree)
|
|
136
|
+
drop_adapter = DropAdapter.new(self, source_listener, @viewer)
|
|
137
|
+
drop_adapter.set_feedback_enabled(drag_controller.reorderable?)
|
|
138
|
+
|
|
139
|
+
@viewer.add_drag_support(operations, types, source_listener)
|
|
140
|
+
@viewer.add_drop_support(operations, types, drop_adapter)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def drag_controller
|
|
144
|
+
@model.tree_controller.drag_controller(@model)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def edit_element(element, select_from, select_to)
|
|
148
|
+
item = element_to_item(element)
|
|
149
|
+
unless item
|
|
150
|
+
puts "ERROR: when trying to edit, no visible item for #{element.inspect}"
|
|
151
|
+
return
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
text = Swt::Widgets::Text.new(control, Swt::SWT::NONE)
|
|
155
|
+
text.set_text(item.get_text)
|
|
156
|
+
colour = ApplicationSWT.display.get_system_color(Swt::SWT::COLOR_GRAY)
|
|
157
|
+
text.set_background(colour)
|
|
158
|
+
|
|
159
|
+
@editor.set_editor(text, item)
|
|
160
|
+
text.set_selection(select_from || 0, select_to || text.get_text.length)
|
|
161
|
+
listener = EditorListener.new(self, element, text)
|
|
162
|
+
text.add_listener(Swt::SWT::FocusOut, listener)
|
|
163
|
+
text.add_listener(Swt::SWT::Traverse, listener)
|
|
164
|
+
|
|
165
|
+
text.set_focus
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def edited_element(element, text)
|
|
169
|
+
if @model.tree_controller and @model.tree_controller.respond_to?(:edited)
|
|
170
|
+
Redcar.safely("edit element") do
|
|
171
|
+
@model.tree_controller.edited(@model, element, text)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def expand_element(element)
|
|
177
|
+
if item = element_to_item(element)
|
|
178
|
+
@viewer.expandToLevel(element, 1)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def select_element(element)
|
|
183
|
+
if item = element_to_item(element)
|
|
184
|
+
@viewer.get_tree.set_selection(item)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def element_to_item(element)
|
|
189
|
+
@viewer.test_find_item(element)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def item_to_element(item)
|
|
193
|
+
@viewer.getViewerRowFromItem(item).get_element
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def selection
|
|
197
|
+
@viewer.get_tree.get_selection.map {|i| item_to_element(i) }
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
class EditorListener
|
|
201
|
+
def initialize(tree_view_swt, element, text_widget)
|
|
202
|
+
@tree_view_swt = tree_view_swt
|
|
203
|
+
@element = element
|
|
204
|
+
@text = text_widget
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def handle_event(e)
|
|
208
|
+
case e.type
|
|
209
|
+
when Swt::SWT::FocusOut
|
|
210
|
+
new_text = @text.get_text
|
|
211
|
+
@text.dispose
|
|
212
|
+
@tree_view_swt.edited_element(@element, new_text)
|
|
213
|
+
when Swt::SWT::Traverse
|
|
214
|
+
case e.detail
|
|
215
|
+
when Swt::SWT::TRAVERSE_RETURN
|
|
216
|
+
new_text = @text.get_text
|
|
217
|
+
@text.dispose
|
|
218
|
+
e.doit = false
|
|
219
|
+
@tree_view_swt.edited_element(@element, new_text)
|
|
220
|
+
when Swt::SWT::TRAVERSE_ESCAPE
|
|
221
|
+
@text.dispose
|
|
222
|
+
e.doit = false
|
|
223
|
+
end
|
|
39
224
|
end
|
|
40
225
|
end
|
|
41
226
|
end
|
|
42
227
|
|
|
43
228
|
def control
|
|
44
|
-
@viewer.
|
|
229
|
+
@viewer.get_control
|
|
45
230
|
end
|
|
46
231
|
|
|
47
232
|
def close
|
|
48
233
|
@viewer.getControl.dispose
|
|
49
234
|
end
|
|
50
235
|
|
|
236
|
+
def right_click(mouse_event)
|
|
237
|
+
if @model.tree_controller
|
|
238
|
+
point = Swt::Graphics::Point.new(mouse_event.x, mouse_event.y)
|
|
239
|
+
item = @viewer.get_item_at(point)
|
|
240
|
+
element = item ? @viewer.getViewerRowFromItem(item).get_element : nil
|
|
241
|
+
if @model.tree_controller.respond_to?(:right_click)
|
|
242
|
+
Redcar.safely("right click on tree") do
|
|
243
|
+
@model.tree_controller.right_click(@model, element)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
51
249
|
class TreeListener
|
|
52
250
|
def tree_collapsed(e)
|
|
53
251
|
end
|
|
@@ -64,6 +262,22 @@ module Redcar
|
|
|
64
262
|
end
|
|
65
263
|
end
|
|
66
264
|
|
|
265
|
+
class MouseListener
|
|
266
|
+
def initialize(tree_view_swt)
|
|
267
|
+
@tree_view_swt = tree_view_swt
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def mouse_double_click(_); end
|
|
271
|
+
def mouse_up(_)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def mouse_down(e)
|
|
275
|
+
if e.button == 3
|
|
276
|
+
@tree_view_swt.right_click(e)
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
67
281
|
class DoubleClickListener
|
|
68
282
|
def double_click(e)
|
|
69
283
|
|
|
@@ -84,12 +298,14 @@ module Redcar
|
|
|
84
298
|
end
|
|
85
299
|
|
|
86
300
|
class OpenListener
|
|
87
|
-
def initialize(
|
|
88
|
-
@
|
|
301
|
+
def initialize(tree_model)
|
|
302
|
+
@tree_model = tree_model
|
|
89
303
|
end
|
|
90
304
|
|
|
91
305
|
def open(e)
|
|
92
|
-
|
|
306
|
+
Redcar.safely("tree row activation") do
|
|
307
|
+
@tree_model.tree_controller.activated(@tree_model, e.getSelection.toArray.to_a.first)
|
|
308
|
+
end
|
|
93
309
|
end
|
|
94
310
|
end
|
|
95
311
|
|
|
@@ -111,6 +327,10 @@ module Redcar
|
|
|
111
327
|
def get_children(tree_node)
|
|
112
328
|
tree_node.children.to_java
|
|
113
329
|
end
|
|
330
|
+
|
|
331
|
+
def get_parent(tree_node)
|
|
332
|
+
# not sure why this is necessary
|
|
333
|
+
end
|
|
114
334
|
|
|
115
335
|
def dispose
|
|
116
336
|
end
|
|
@@ -130,11 +350,13 @@ module Redcar
|
|
|
130
350
|
end
|
|
131
351
|
|
|
132
352
|
def get_image(tree_node)
|
|
133
|
-
case tree_node.icon
|
|
353
|
+
case icon = tree_node.icon
|
|
134
354
|
when :directory
|
|
135
355
|
dir_image
|
|
136
356
|
when :file
|
|
137
357
|
file_image
|
|
358
|
+
when String
|
|
359
|
+
image(icon)
|
|
138
360
|
end
|
|
139
361
|
end
|
|
140
362
|
|
|
@@ -143,17 +365,21 @@ module Redcar
|
|
|
143
365
|
|
|
144
366
|
private
|
|
145
367
|
|
|
368
|
+
def image(path)
|
|
369
|
+
Swt::Graphics::Image.new(ApplicationSWT.display, path)
|
|
370
|
+
end
|
|
371
|
+
|
|
146
372
|
def dir_image
|
|
147
373
|
@dir_image ||= begin
|
|
148
374
|
path = File.join(Redcar.root, %w(plugins application icons darwin-folder.png))
|
|
149
|
-
|
|
375
|
+
image(path)
|
|
150
376
|
end
|
|
151
377
|
end
|
|
152
378
|
|
|
153
379
|
def file_image
|
|
154
380
|
@file_image ||= begin
|
|
155
381
|
path = File.join(Redcar.root, %w(plugins application icons darwin-file.png))
|
|
156
|
-
|
|
382
|
+
image(path)
|
|
157
383
|
end
|
|
158
384
|
end
|
|
159
385
|
end
|