sirens 0.0.1 → 0.1.1
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.
- checksums.yaml +4 -4
- data/lib/components/{component_behaviour.rb → abstract_component.rb} +32 -47
- data/lib/components/component.rb +24 -9
- data/lib/components/containers/splitter.rb +12 -64
- data/lib/components/containers/stack.rb +1 -1
- data/lib/components/containers/tabs.rb +3 -3
- data/lib/components/containers/window.rb +4 -0
- data/lib/components/primitive_component.rb +4 -57
- data/lib/components/widgets/checkbox.rb +2 -2
- data/lib/components/widgets/input_text.rb +1 -1
- data/lib/components/widgets/tree_choice.rb +2 -9
- data/lib/{components/widgets → components_builder}/column_props.rb +14 -2
- data/lib/{layouts → components_builder}/columns_builder.rb +0 -0
- data/lib/components_builder/layout_builder.rb +215 -0
- data/lib/{layouts → components_builder}/radio_button_group_builder.rb +0 -0
- data/lib/sirens.rb +18 -11
- data/lib/sirens/browsers/module_browser.rb +4 -4
- data/lib/sirens/browsers/object_browser.rb +4 -1
- data/lib/sirens/components/ancestors_list.rb +4 -1
- data/lib/sirens/components/class_browser.rb +5 -4
- data/lib/sirens/components/constants_list.rb +1 -1
- data/lib/sirens/components/method_source_code.rb +1 -1
- data/lib/sirens/components/methods_list.rb +5 -2
- data/lib/sirens/components/modules_list.rb +4 -1
- data/lib/sirens/components/namespaces_list.rb +4 -1
- data/lib/sirens/models/constant_model.rb +2 -1
- data/lib/sirens/models/icons.rb +28 -0
- data/lib/sirens/models/method.rb +94 -0
- data/lib/sirens/models/method_model.rb +8 -83
- data/lib/sirens/models/module_browser_model.rb +85 -25
- data/lib/sirens/models/object_browser_model.rb +4 -0
- data/lib/views/{view.rb → abstract_view.rb} +16 -50
- data/lib/views/button_view.rb +1 -1
- data/lib/views/{check_button_view.rb → checkbox_view.rb} +1 -1
- data/lib/views/component_view.rb +12 -0
- data/lib/views/{entry_view.rb → input_text_view.rb} +1 -1
- data/lib/views/list_view.rb +33 -8
- data/lib/views/menu_view.rb +1 -1
- data/lib/views/radio_button_view.rb +1 -1
- data/lib/views/splitter_view.rb +101 -0
- data/lib/views/stack_view.rb +1 -1
- data/lib/views/{notebook_view.rb → tabs_view.rb} +1 -1
- data/lib/views/text_view.rb +1 -1
- data/lib/views/tree_view.rb +42 -20
- data/lib/views/widget_view.rb +96 -0
- data/lib/views/window_view.rb +1 -1
- data/resources/icons/array.png +0 -0
- data/resources/icons/class.png +0 -0
- data/resources/icons/false.png +0 -0
- data/resources/icons/hash.png +0 -0
- data/resources/icons/method.png +0 -0
- data/resources/icons/module.png +0 -0
- data/resources/icons/number.png +0 -0
- data/resources/icons/object.png +0 -0
- data/resources/icons/private-method.png +0 -0
- data/resources/icons/protected-method.png +0 -0
- data/resources/icons/public-method.png +0 -0
- data/resources/icons/string.png +0 -0
- data/resources/icons/true.png +0 -0
- metadata +46 -15
- data/lib/layouts/layout_builder.rb +0 -203
- data/lib/views/paned_view.rb +0 -26
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module Sirens
|
|
2
2
|
class Checkbox < PrimitiveComponent
|
|
3
3
|
##
|
|
4
|
-
# Returns a
|
|
4
|
+
# Returns a CheckboxView.
|
|
5
5
|
#
|
|
6
6
|
def create_view()
|
|
7
|
-
|
|
7
|
+
CheckboxView.new(on_toggled: proc{ |state:| on_toggled(state: state) })
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
##
|
|
@@ -43,10 +43,7 @@ module Sirens
|
|
|
43
43
|
# Syncs the ui from the model.
|
|
44
44
|
#
|
|
45
45
|
def sync_ui_from_model()
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
view.clear_items
|
|
49
|
-
view.add_items(parent_iter: nil, items: model.tree.roots, index: 0)
|
|
46
|
+
view.set_roots(model.tree.roots)
|
|
50
47
|
end
|
|
51
48
|
|
|
52
49
|
# Events
|
|
@@ -68,14 +65,10 @@ module Sirens
|
|
|
68
65
|
|
|
69
66
|
indices_path = model.path_of(selection_hierarchy)
|
|
70
67
|
|
|
71
|
-
|
|
72
|
-
view.set_selection_indices(indices_path)
|
|
73
|
-
end
|
|
68
|
+
view.set_selection_indices(indices_path)
|
|
74
69
|
end
|
|
75
70
|
|
|
76
71
|
def on_selection_changed(selection_items:, selection_paths:)
|
|
77
|
-
return if is_updating_view?
|
|
78
|
-
|
|
79
72
|
model.set_selection_from_path(path: selection_paths.first) unless model.nil?
|
|
80
73
|
end
|
|
81
74
|
end
|
|
@@ -4,7 +4,15 @@ module Sirens
|
|
|
4
4
|
@props = props
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
attr_reader :props
|
|
8
|
+
|
|
9
|
+
def has_image_block?()
|
|
10
|
+
@props.key?(:get_image_block)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def has_text_block?()
|
|
14
|
+
@props.key?(:get_text_block)
|
|
15
|
+
end
|
|
8
16
|
|
|
9
17
|
def fetch(key, absent_value)
|
|
10
18
|
@props.fetch(key, absent_value)
|
|
@@ -15,9 +23,13 @@ module Sirens
|
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
def display_text_of(item)
|
|
18
|
-
return item.to_s if !
|
|
26
|
+
return item.to_s if ! has_text_block?
|
|
19
27
|
|
|
20
28
|
@props[:get_text_block].call(item)
|
|
21
29
|
end
|
|
30
|
+
|
|
31
|
+
def display_image_of(item)
|
|
32
|
+
@props[:get_image_block].call(item)
|
|
33
|
+
end
|
|
22
34
|
end
|
|
23
35
|
end
|
|
File without changes
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
module Sirens
|
|
2
|
+
class LayoutBuilder
|
|
3
|
+
|
|
4
|
+
# Initializing
|
|
5
|
+
|
|
6
|
+
def initialize(root_component: nil)
|
|
7
|
+
super()
|
|
8
|
+
|
|
9
|
+
@root_component = root_component
|
|
10
|
+
@built_props = Hash[]
|
|
11
|
+
@built_components = []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Accessing
|
|
15
|
+
|
|
16
|
+
attr_reader :built_props
|
|
17
|
+
attr_reader :built_components
|
|
18
|
+
|
|
19
|
+
# Building
|
|
20
|
+
|
|
21
|
+
def render(props: Hash[], &build_block)
|
|
22
|
+
eval(props: props, &build_block)
|
|
23
|
+
|
|
24
|
+
@root_component.add_all_components(built_components)
|
|
25
|
+
|
|
26
|
+
self
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def eval(props: Hash[], &build_block)
|
|
30
|
+
merge_props(props)
|
|
31
|
+
|
|
32
|
+
instance_exec(@root_component, &build_block) unless build_block.nil?
|
|
33
|
+
|
|
34
|
+
self
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def styles(props)
|
|
38
|
+
merge_props(props)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def model(model)
|
|
42
|
+
merge_props(model: model)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def merge_props(props)
|
|
46
|
+
@built_props.merge!(props)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Containers
|
|
50
|
+
|
|
51
|
+
def component(component)
|
|
52
|
+
@built_components << component
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def window(props = Hash[], &build_block)
|
|
56
|
+
LayoutBuilder.new.tap do |builder|
|
|
57
|
+
builder.eval(props: props, &build_block)
|
|
58
|
+
|
|
59
|
+
Window.new(builder.built_props).tap do |window|
|
|
60
|
+
window.add_all_components(builder.built_components)
|
|
61
|
+
|
|
62
|
+
@built_components << window
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def horizontal_stack(props = Hash[], &build_block)
|
|
68
|
+
LayoutBuilder.new.tap do |builder|
|
|
69
|
+
builder.eval(props: props, &build_block)
|
|
70
|
+
|
|
71
|
+
Stack.horizontal(builder.built_props).tap do |stack|
|
|
72
|
+
stack.add_all_components(builder.built_components)
|
|
73
|
+
|
|
74
|
+
@built_components << stack
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def vertical_stack(props = Hash[], &build_block)
|
|
80
|
+
LayoutBuilder.new.tap do |builder|
|
|
81
|
+
builder.eval(props: props, &build_block)
|
|
82
|
+
|
|
83
|
+
Stack.vertical(builder.built_props).tap do |stack|
|
|
84
|
+
stack.add_all_components(builder.built_components)
|
|
85
|
+
|
|
86
|
+
@built_components << stack
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def horizontal_splitter(props = Hash[], &build_block)
|
|
92
|
+
LayoutBuilder.new.tap do |builder|
|
|
93
|
+
builder.eval(props: props, &build_block)
|
|
94
|
+
|
|
95
|
+
Splitter.horizontal(builder.built_props).tap do |splitter|
|
|
96
|
+
splitter.add_all_components(builder.built_components)
|
|
97
|
+
|
|
98
|
+
@built_components << splitter
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def vertical_splitter(props = Hash[], &build_block)
|
|
104
|
+
LayoutBuilder.new.tap do |builder|
|
|
105
|
+
builder.eval(props: props, &build_block)
|
|
106
|
+
|
|
107
|
+
Splitter.vertical(builder.built_props).tap do |splitter|
|
|
108
|
+
splitter.add_all_components(builder.built_components)
|
|
109
|
+
|
|
110
|
+
@built_components << splitter
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def tabs(props = Hash[], &build_block)
|
|
116
|
+
LayoutBuilder.new.tap do |builder|
|
|
117
|
+
builder.eval(props: props, &build_block)
|
|
118
|
+
|
|
119
|
+
Tabs.new(builder.built_props).tap do |tabs|
|
|
120
|
+
tabs.add_all_components(builder.built_components)
|
|
121
|
+
|
|
122
|
+
@built_components << tabs
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Widgets
|
|
128
|
+
|
|
129
|
+
def button(props = Hash[], &build_block)
|
|
130
|
+
LayoutBuilder.new.tap do |builder|
|
|
131
|
+
builder.eval(props: props, &build_block)
|
|
132
|
+
|
|
133
|
+
@built_components << Button.new(builder.built_props)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def checkbox(props = Hash[], &build_block)
|
|
138
|
+
LayoutBuilder.new.tap do |builder|
|
|
139
|
+
builder.eval(props: props, &build_block)
|
|
140
|
+
|
|
141
|
+
@built_components << Checkbox.new(builder.built_props)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def radio_button(props = Hash[], &build_block)
|
|
146
|
+
LayoutBuilder.new.tap do |builder|
|
|
147
|
+
builder.eval(props: props, &build_block)
|
|
148
|
+
|
|
149
|
+
@built_components << RadioButton.new(builder.built_props)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def radio_buttons_group(props = Hash[], &build_block)
|
|
154
|
+
buttons = RadioButtonGroupBuilder.new.render(&build_block)
|
|
155
|
+
|
|
156
|
+
@built_components.concat(buttons)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def list(props = Hash[], &build_block)
|
|
160
|
+
columns_builder = ColumnsBuilder.new.render(props, &build_block)
|
|
161
|
+
|
|
162
|
+
props[:popup_menu] = columns_builder.popup_menu unless columns_builder.popup_menu.nil?
|
|
163
|
+
|
|
164
|
+
List.new(props).tap { |list|
|
|
165
|
+
list.define_columns(columns_builder.columns)
|
|
166
|
+
|
|
167
|
+
@built_components << list
|
|
168
|
+
}
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def choices_list(props = Hash[], &build_block)
|
|
172
|
+
columns_builder = ColumnsBuilder.new.render(props, &build_block)
|
|
173
|
+
|
|
174
|
+
props[:popup_menu] = columns_builder.popup_menu unless columns_builder.popup_menu.nil?
|
|
175
|
+
|
|
176
|
+
ListChoice.new(props).tap { |list|
|
|
177
|
+
list.define_columns(columns_builder.columns)
|
|
178
|
+
|
|
179
|
+
@built_components << list
|
|
180
|
+
}
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def input_text(props = Hash[], &build_block)
|
|
184
|
+
LayoutBuilder.new.tap do |builder|
|
|
185
|
+
builder.eval(props: props, &build_block)
|
|
186
|
+
|
|
187
|
+
@built_components << InputText.new(builder.built_props)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def text(props = Hash[], &build_block)
|
|
192
|
+
LayoutBuilder.new.tap do |builder|
|
|
193
|
+
builder.eval(props: props, &build_block)
|
|
194
|
+
|
|
195
|
+
@built_components << Text.new(builder.built_props)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def choices_tree(props = Hash[], &build_block)
|
|
200
|
+
columns_builder = ColumnsBuilder.new.render(props, &build_block)
|
|
201
|
+
|
|
202
|
+
props[:popup_menu] = columns_builder.get_popup_menu unless columns_builder.get_popup_menu.nil?
|
|
203
|
+
|
|
204
|
+
TreeChoice.new(props).tap { |tree|
|
|
205
|
+
tree.define_columns(columns_builder.columns)
|
|
206
|
+
|
|
207
|
+
@built_components << tree
|
|
208
|
+
}
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def popup_menu(&block)
|
|
212
|
+
merge_props(popup_menu: block)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
File without changes
|
data/lib/sirens.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'gtk3'
|
|
2
|
+
require 'method_source'
|
|
2
3
|
|
|
3
4
|
module Sirens
|
|
4
5
|
class << self
|
|
@@ -35,7 +36,7 @@ module Sirens
|
|
|
35
36
|
autoload(:TreeChoiceModel, 'models/tree_choice_model.rb')
|
|
36
37
|
|
|
37
38
|
# Components
|
|
38
|
-
autoload(:
|
|
39
|
+
autoload(:AbstractComponent, 'components/abstract_component.rb')
|
|
39
40
|
autoload(:Component, 'components/component.rb')
|
|
40
41
|
autoload(:PrimitiveComponent, 'components/primitive_component.rb')
|
|
41
42
|
autoload(:Window, 'components/containers/window.rb')
|
|
@@ -45,7 +46,6 @@ module Sirens
|
|
|
45
46
|
autoload(:Button, 'components/widgets/button.rb')
|
|
46
47
|
autoload(:Checkbox, 'components/widgets/checkbox.rb')
|
|
47
48
|
autoload(:RadioButton, 'components/widgets/radio_button.rb')
|
|
48
|
-
autoload(:ColumnProps, 'components/widgets/column_props.rb')
|
|
49
49
|
autoload(:List, 'components/widgets/list.rb')
|
|
50
50
|
autoload(:ListChoice, 'components/widgets/list_choice.rb')
|
|
51
51
|
autoload(:InputText, 'components/widgets/input_text.rb')
|
|
@@ -53,27 +53,34 @@ module Sirens
|
|
|
53
53
|
autoload(:TreeChoice, 'components/widgets/tree_choice.rb')
|
|
54
54
|
|
|
55
55
|
# Layouts
|
|
56
|
-
autoload(:
|
|
57
|
-
autoload(:
|
|
58
|
-
autoload(:
|
|
56
|
+
autoload(:ColumnProps, 'components_builder/column_props.rb')
|
|
57
|
+
autoload(:LayoutBuilder, 'components_builder/layout_builder.rb')
|
|
58
|
+
autoload(:ColumnsBuilder, 'components_builder/columns_builder.rb')
|
|
59
|
+
autoload(:RadioButtonGroupBuilder, 'components_builder/radio_button_group_builder.rb')
|
|
59
60
|
|
|
60
61
|
# Views
|
|
61
|
-
autoload(:
|
|
62
|
+
autoload(:AbstractView, 'views/abstract_view.rb')
|
|
63
|
+
autoload(:ComponentView, 'views/component_view.rb')
|
|
64
|
+
autoload(:WidgetView, 'views/widget_view.rb')
|
|
62
65
|
autoload(:MenuView, 'views/menu_view.rb')
|
|
63
66
|
autoload(:WindowView, 'views/window_view.rb')
|
|
64
67
|
autoload(:StackView, 'views/stack_view.rb')
|
|
65
|
-
autoload(:
|
|
66
|
-
autoload(:
|
|
68
|
+
autoload(:SplitterView, 'views/splitter_view.rb')
|
|
69
|
+
autoload(:TabsView, 'views/tabs_view.rb')
|
|
67
70
|
autoload(:ButtonView, 'views/button_view.rb')
|
|
68
|
-
autoload(:
|
|
71
|
+
autoload(:CheckboxView, 'views/checkbox_view.rb')
|
|
69
72
|
autoload(:RadioButtonView, 'views/radio_button_view.rb')
|
|
70
73
|
autoload(:ListView, 'views/list_view.rb')
|
|
71
|
-
autoload(:
|
|
74
|
+
autoload(:InputTextView, 'views/input_text_view.rb')
|
|
72
75
|
autoload(:TextView, 'views/text_view.rb')
|
|
73
76
|
autoload(:TreeView, 'views/tree_view.rb')
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
# Sirens
|
|
79
|
+
|
|
80
|
+
autoload(:Method, 'sirens/models/method.rb')
|
|
81
|
+
autoload(:Icons, 'sirens/models/icons.rb')
|
|
76
82
|
autoload(:MethodModel, 'sirens/models/method_model.rb')
|
|
83
|
+
autoload(:ModuleBrowserModel, 'sirens/models/module_browser_model.rb')
|
|
77
84
|
autoload(:ConstantModel, 'sirens/models/constant_model.rb')
|
|
78
85
|
autoload(:ObjectBrowserModel, 'sirens/models/object_browser_model.rb')
|
|
79
86
|
|
|
@@ -20,7 +20,7 @@ module Sirens
|
|
|
20
20
|
|
|
21
21
|
# Building
|
|
22
22
|
|
|
23
|
-
def
|
|
23
|
+
def render_with(layout)
|
|
24
24
|
browser_model = model
|
|
25
25
|
|
|
26
26
|
layout.render do |component|
|
|
@@ -39,17 +39,17 @@ module Sirens
|
|
|
39
39
|
|
|
40
40
|
component NamespacesList.new(
|
|
41
41
|
model: browser_model.namespaces,
|
|
42
|
-
splitter_proportion: 1.0/
|
|
42
|
+
splitter_proportion: 1.0/5.0
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
component ModulesList.new(
|
|
46
46
|
model: browser_model.modules,
|
|
47
|
-
splitter_proportion: 1.0/
|
|
47
|
+
splitter_proportion: 1.0/5.0,
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
component ClassBrowser.new(
|
|
51
51
|
model: browser_model,
|
|
52
|
-
splitter_proportion:
|
|
52
|
+
splitter_proportion: 1.0/5.0
|
|
53
53
|
)
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -16,7 +16,7 @@ module Sirens
|
|
|
16
16
|
|
|
17
17
|
# Building
|
|
18
18
|
|
|
19
|
-
def
|
|
19
|
+
def render_with(layout)
|
|
20
20
|
browser_model = model
|
|
21
21
|
|
|
22
22
|
layout.render do |component|
|
|
@@ -38,6 +38,9 @@ module Sirens
|
|
|
38
38
|
component.browse(object: item.value)
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
column label: '',
|
|
42
|
+
get_image_block: proc{ |inst_var| inst_var.icon }
|
|
43
|
+
|
|
41
44
|
column label: 'Instance variables',
|
|
42
45
|
get_text_block: proc { |inst_var| inst_var.display_string }
|
|
43
46
|
|
|
@@ -3,7 +3,7 @@ module Sirens
|
|
|
3
3
|
|
|
4
4
|
# Building
|
|
5
5
|
|
|
6
|
-
def
|
|
6
|
+
def render_with(layout)
|
|
7
7
|
|
|
8
8
|
layout.render do |component|
|
|
9
9
|
choices_list do
|
|
@@ -13,6 +13,9 @@ module Sirens
|
|
|
13
13
|
show_headers: true
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
+
column label: '',
|
|
17
|
+
get_image_block: proc{ |a_module| Icons.icon_for(a_module) }
|
|
18
|
+
|
|
16
19
|
column label: 'Module ancestors',
|
|
17
20
|
get_text_block: proc{ |a_module| a_module.name }
|
|
18
21
|
end
|
|
@@ -3,18 +3,18 @@ module Sirens
|
|
|
3
3
|
|
|
4
4
|
# Building
|
|
5
5
|
|
|
6
|
-
def
|
|
6
|
+
def render_with(layout)
|
|
7
7
|
browser_model = model
|
|
8
8
|
|
|
9
9
|
layout.render do |component|
|
|
10
10
|
horizontal_splitter do
|
|
11
11
|
component AncestorsList.new(
|
|
12
12
|
model: browser_model.module_ancestors,
|
|
13
|
-
splitter_proportion: 1.0/
|
|
13
|
+
splitter_proportion: 1.0/2.0
|
|
14
14
|
)
|
|
15
15
|
|
|
16
16
|
tabs do
|
|
17
|
-
styles splitter_proportion:
|
|
17
|
+
styles splitter_proportion: 1.0/2.0
|
|
18
18
|
|
|
19
19
|
component MethodsList.new(
|
|
20
20
|
model: browser_model.methods,
|
|
@@ -23,7 +23,8 @@ module Sirens
|
|
|
23
23
|
show_public_methods: browser_model.show_public_methods,
|
|
24
24
|
show_protected_methods: browser_model.show_protected_methods,
|
|
25
25
|
show_private_methods: browser_model.show_private_methods,
|
|
26
|
-
tab_label: 'Methods'
|
|
26
|
+
tab_label: 'Methods',
|
|
27
|
+
get_method_image_block: proc{ |method| method.icon }
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
component ConstantsList.new(
|