glimmer-dsl-libui 0.7.0 → 0.7.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/CHANGELOG.md +8 -0
- data/README.md +4 -4
- data/VERSION +1 -1
- data/docs/examples/GLIMMER-DSL-LIBUI-BASIC-EXAMPLES.md +2 -0
- data/examples/basic_table_selection.rb +147 -20
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/control_proxy/column.rb +52 -1
- data/lib/glimmer/libui/control_proxy/table_proxy.rb +54 -1
- data/lib/glimmer/libui.rb +27 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26461689045ba139f45bc8b50392f77a261c4f3ade65ed9f64da188086d0f2e5
|
4
|
+
data.tar.gz: a8745528d47f04cff8c6d65d03e7d732dc06ab3b35dbea6d754253a5eddcd543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 286be15f2b3df417ee6c7e904508d186353118a74547a87d0eef1d79670d7d4b405a803b3ba7c86c96d0665fbf7e8673f846aad55b2ce71f45b478ce05a904f7
|
7
|
+
data.tar.gz: 93e2451a94d4ec59c04a20dd6cd6cd34c3b8efb00d19d40cba7cbe6ef5c57efb0e0c689ea122d884fb0873dc7fcd50b3d68c032b0c712b9581e66303b8148257
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.7.1
|
4
|
+
|
5
|
+
- `table` column `on_clicked` listener (can be nested under `text_column`, `text_color_column`, `button_column`, `checkbox_column`, `checkbox_text_color_column`, `image_column`, `image_text_color_column`, `image_text_column`, and `progress_bar_column`)
|
6
|
+
- `table` column `sort_indicator` property (can be `nil`, `:ascending` [aliases: `:asc`, `:a`], `:descending` [aliases: `:desc`, `:d`])
|
7
|
+
- `table` column `set_sort_indicator` alias for `sort_indicator=` can accept an option of `reset_columns: false` to avoid resetting sort indicator of other columns when setting sort indicator on a specific column
|
8
|
+
- `table` `header_visible` property (Boolean)
|
9
|
+
- Fix issue with `table` `selection_mode` getting set to `nil` if not specified
|
10
|
+
|
3
11
|
## 0.7.0
|
4
12
|
|
5
13
|
- Upgrade to libui v0.1.2.pre (including newer libui-ng with table selection API)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.7.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.7.1
|
2
2
|
## Prerequisite-Free Ruby Desktop Development GUI Library
|
3
3
|
### The Quickest Way From Zero To GUI
|
4
4
|
[](http://badge.fury.io/rb/glimmer-dsl-libui)
|
@@ -544,7 +544,7 @@ gem install glimmer-dsl-libui
|
|
544
544
|
Or install via Bundler `Gemfile`:
|
545
545
|
|
546
546
|
```ruby
|
547
|
-
gem 'glimmer-dsl-libui', '~> 0.7.
|
547
|
+
gem 'glimmer-dsl-libui', '~> 0.7.1'
|
548
548
|
```
|
549
549
|
|
550
550
|
Test that installation worked by running the [Meta-Example](#examples):
|
@@ -736,9 +736,9 @@ Keyword(Args) | Properties | Listeners
|
|
736
736
|
`string(string = '')` | `font`, `color` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, hex, or [X11](https://en.wikipedia.org/wiki/X11_color_names) color), `background` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, hex, or [X11](https://en.wikipedia.org/wiki/X11_color_names) color), `underline`, `underline_color` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, hex, or [X11](https://en.wikipedia.org/wiki/X11_color_names) color), `open_type_features`, `string` (`String`) | None
|
737
737
|
`tab` | `margined` (Boolean), `num_pages` (`Integer`) | None
|
738
738
|
`tab_item(name as String)` | `index` [read-only] (`Integer`), `margined` (Boolean), `name` [read-only] (`String`) | None
|
739
|
-
`table` | `cell_rows` (`Array` (rows) of `Arrays` (row columns) of cell values (e.g. `String` values for `text_column` cells or `Array` of `image`/`String` for `image_text_column`)), `editable` as Boolean, `selection_mode` (`:zero_or_many` , `:none` , `:zero_or_one` , or `:one`), `selection` (`Integer` for row index or `Array` of multiple row indexes) | `on_changed {|row, type, row_data| ...}`, `on_edited {|row, row_data| ...}`, `on_row_clicked {|table, row| }`, `on_row_double_clicked {|table, row| }`, and `on_selection_changed {|table| }`
|
739
|
+
`table` | `cell_rows` (`Array` (rows) of `Arrays` (row columns) of cell values (e.g. `String` values for `text_column` cells or `Array` of `image`/`String` for `image_text_column`)), `editable` as Boolean, `selection_mode` (`:zero_or_many` , `:none` , `:zero_or_one` , or `:one`), `selection` (`Integer` for row index or `Array` of multiple row indexes), `header_visible` (Boolean) | `on_changed {|row, type, row_data| ...}`, `on_edited {|row, row_data| ...}`, `on_row_clicked {|table, row| }`, `on_row_double_clicked {|table, row| }`, and `on_selection_changed {|table| }`
|
740
740
|
`text(x = 0 as Numeric, y = 0 as Numeric, width = area_width as Numeric)` | `align`, `default_font` | None
|
741
|
-
`text_column(name as String)` | `editable` (Boolean) |
|
741
|
+
`text_column(name as String)` | `editable` (Boolean), `sort_indicator` (`:ascending` [alias: `:asc`, `:a`], `:descending` [alias: `:desc`, `:d`], or `nil`) | `on_clicked {|tc, column_index| }`
|
742
742
|
`text_color_column(name as String)` | `editable` (Boolean) | None
|
743
743
|
`time_picker` | `time` (`Hash` of keys: `sec` as `Integer`, `min` as `Integer`, `hour` as `Integer`) | `on_changed`
|
744
744
|
`vertical_box` | `padded` (Boolean) | None
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.1
|
@@ -1520,6 +1520,8 @@ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/
|
|
1520
1520
|
ruby -r glimmer-dsl-libui -e "require 'examples/basic_table_selection'"
|
1521
1521
|
```
|
1522
1522
|
|
1523
|
+

|
1524
|
+
|
1523
1525
|
## Basic Area
|
1524
1526
|
|
1525
1527
|
[examples/basic_area.rb](/examples/basic_area.rb)
|
@@ -4,13 +4,16 @@ class BasicTableSelection
|
|
4
4
|
include Glimmer::LibUI::Application
|
5
5
|
|
6
6
|
before_body do
|
7
|
-
@
|
7
|
+
@one_data = [
|
8
8
|
%w[cat meow],
|
9
9
|
%w[dog woof],
|
10
10
|
%w[chicken cock-a-doodle-doo],
|
11
11
|
%w[horse neigh],
|
12
12
|
%w[cow moo]
|
13
13
|
]
|
14
|
+
@zero_or_one_data = @one_data.dup
|
15
|
+
@zero_or_many_data = @one_data.dup
|
16
|
+
@none_data = @one_data.dup
|
14
17
|
end
|
15
18
|
|
16
19
|
body {
|
@@ -22,7 +25,7 @@ class BasicTableSelection
|
|
22
25
|
stretchy false
|
23
26
|
|
24
27
|
@one_radio_buttons = radio_buttons {
|
25
|
-
items @
|
28
|
+
items @one_data.size.times.map { |row| "Row #{row} Selection" }
|
26
29
|
|
27
30
|
on_selected do |rb|
|
28
31
|
@one_table.selection = [rb.selected]
|
@@ -30,13 +33,44 @@ class BasicTableSelection
|
|
30
33
|
}
|
31
34
|
}
|
32
35
|
|
36
|
+
button('Toggle Table Header Visibility') {
|
37
|
+
stretchy false
|
38
|
+
|
39
|
+
on_clicked do
|
40
|
+
@one_table.header_visible = !@one_table.header_visible
|
41
|
+
end
|
42
|
+
}
|
43
|
+
|
33
44
|
@one_table = table {
|
34
|
-
text_column('Animal')
|
35
|
-
|
45
|
+
text_column('Animal') {
|
46
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
47
|
+
|
48
|
+
on_clicked do |tc, column|
|
49
|
+
puts "Clicked column #{column}: #{tc.name}"
|
50
|
+
selected_row = @one_table.selection && @one_data[@one_table.selection]
|
51
|
+
tc.toggle_sort_indicator
|
52
|
+
@one_data.sort_by! { |row_data| row_data[column] }
|
53
|
+
@one_data.reverse! if tc.sort_indicator == :descending
|
54
|
+
@one_table.selection = @one_data.index(selected_row)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
text_column('Description') {
|
58
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
59
|
+
|
60
|
+
on_clicked do |tc, column|
|
61
|
+
puts "Clicked column #{column}: #{tc.name}"
|
62
|
+
selected_row = @one_table.selection && @one_data[@one_table.selection]
|
63
|
+
tc.toggle_sort_indicator
|
64
|
+
@one_data.sort_by! { |row_data| row_data[column] }
|
65
|
+
@one_data.reverse! if tc.sort_indicator == :descending
|
66
|
+
@one_table.selection = @one_data.index(selected_row)
|
67
|
+
end
|
68
|
+
}
|
36
69
|
|
37
|
-
cell_rows @
|
38
|
-
selection_mode :one # other values are :zero_or_many , :zero_or_one, :none
|
70
|
+
cell_rows @one_data
|
71
|
+
selection_mode :one # other values are :zero_or_many , :zero_or_one, :none (default is :zero_or_one if not specified)
|
39
72
|
selection 2 # initial selection row index (could be nil too or just left off, defaulting to 0)
|
73
|
+
# header_visible true # default
|
40
74
|
|
41
75
|
on_row_clicked do |t, row|
|
42
76
|
puts "Row Clicked: #{row}"
|
@@ -62,7 +96,7 @@ class BasicTableSelection
|
|
62
96
|
stretchy false
|
63
97
|
|
64
98
|
@zero_or_one_radio_buttons = radio_buttons {
|
65
|
-
items @
|
99
|
+
items @zero_or_one_data.size.times.map { |row| "Row #{row} Selection" }
|
66
100
|
|
67
101
|
on_selected do |rb|
|
68
102
|
@zero_or_one_table.selection = [rb.selected]
|
@@ -70,13 +104,44 @@ class BasicTableSelection
|
|
70
104
|
}
|
71
105
|
}
|
72
106
|
|
107
|
+
button('Toggle Table Header Visibility') {
|
108
|
+
stretchy false
|
109
|
+
|
110
|
+
on_clicked do
|
111
|
+
@zero_or_one_table.header_visible = !@zero_or_one_table.header_visible
|
112
|
+
end
|
113
|
+
}
|
114
|
+
|
73
115
|
@zero_or_one_table = table {
|
74
|
-
text_column('Animal')
|
75
|
-
|
116
|
+
text_column('Animal') {
|
117
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
118
|
+
|
119
|
+
on_clicked do |tc, column|
|
120
|
+
puts "Clicked column #{column}: #{tc.name}"
|
121
|
+
selected_row = @zero_or_one_table.selection && @zero_or_one_data[@zero_or_one_table.selection]
|
122
|
+
tc.toggle_sort_indicator
|
123
|
+
@zero_or_one_data.sort_by! { |row_data| row_data[column] }
|
124
|
+
@zero_or_one_data.reverse! if tc.sort_indicator == :descending
|
125
|
+
@zero_or_one_table.selection = @zero_or_one_data.index(selected_row)
|
126
|
+
end
|
127
|
+
}
|
128
|
+
text_column('Description') {
|
129
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
130
|
+
|
131
|
+
on_clicked do |tc, column|
|
132
|
+
puts "Clicked column #{column}: #{tc.name}"
|
133
|
+
selected_row = @zero_or_one_table.selection && @zero_or_one_data[@zero_or_one_table.selection]
|
134
|
+
tc.toggle_sort_indicator
|
135
|
+
@zero_or_one_data.sort_by! { |row_data| row_data[column] }
|
136
|
+
@zero_or_one_data.reverse! if tc.sort_indicator == :descending
|
137
|
+
@zero_or_one_table.selection = @zero_or_one_data.index(selected_row)
|
138
|
+
end
|
139
|
+
}
|
76
140
|
|
77
|
-
cell_rows @
|
78
|
-
selection_mode :zero_or_one # other values are :zero_or_many , :one, :none
|
141
|
+
cell_rows @zero_or_one_data
|
142
|
+
selection_mode :zero_or_one # other values are :zero_or_many , :one, :none (default is :zero_or_one if not specified)
|
79
143
|
# selection 0 # initial selection row index (could be nil too or just left off)
|
144
|
+
# header_visible true # default
|
80
145
|
|
81
146
|
on_row_clicked do |t, row|
|
82
147
|
puts "Row Clicked: #{row}"
|
@@ -101,7 +166,7 @@ class BasicTableSelection
|
|
101
166
|
vertical_box {
|
102
167
|
stretchy false
|
103
168
|
|
104
|
-
@zero_or_many_checkboxes = @
|
169
|
+
@zero_or_many_checkboxes = @zero_or_many_data.size.times.map do |row|
|
105
170
|
checkbox("Row #{row} Selection") {
|
106
171
|
on_toggled do |c|
|
107
172
|
table_selection = @zero_or_many_table.selection.to_a
|
@@ -116,13 +181,44 @@ class BasicTableSelection
|
|
116
181
|
end
|
117
182
|
}
|
118
183
|
|
184
|
+
button('Toggle Table Header Visibility') {
|
185
|
+
stretchy false
|
186
|
+
|
187
|
+
on_clicked do
|
188
|
+
@zero_or_many_table.header_visible = !@zero_or_many_table.header_visible
|
189
|
+
end
|
190
|
+
}
|
191
|
+
|
119
192
|
@zero_or_many_table = table {
|
120
|
-
text_column('Animal')
|
121
|
-
|
193
|
+
text_column('Animal') {
|
194
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
195
|
+
|
196
|
+
on_clicked do |tc, column|
|
197
|
+
puts "Clicked column #{column}: #{tc.name}"
|
198
|
+
selected_rows = @zero_or_many_table.selection&.map { |row| @zero_or_many_data[row] }
|
199
|
+
tc.toggle_sort_indicator
|
200
|
+
@zero_or_many_data.sort_by! { |row_data| row_data[column] }
|
201
|
+
@zero_or_many_data.reverse! if tc.sort_indicator == :descending
|
202
|
+
@zero_or_many_table.selection = selected_rows&.map {|row_data| @zero_or_many_data.index(row_data) }
|
203
|
+
end
|
204
|
+
}
|
205
|
+
text_column('Description') {
|
206
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
207
|
+
|
208
|
+
on_clicked do |tc, column|
|
209
|
+
puts "Clicked column #{column}: #{tc.name}"
|
210
|
+
selected_rows = @zero_or_many_table.selection&.map { |row| @zero_or_many_data[row] }
|
211
|
+
tc.toggle_sort_indicator
|
212
|
+
@zero_or_many_data.sort_by! { |row_data| row_data[column] }
|
213
|
+
@zero_or_many_data.reverse! if tc.sort_indicator == :descending
|
214
|
+
@zero_or_many_table.selection = selected_rows&.map {|row_data| @zero_or_many_data.index(row_data) }
|
215
|
+
end
|
216
|
+
}
|
122
217
|
|
123
|
-
cell_rows @
|
124
|
-
selection_mode :zero_or_many # other values are :none , :zero_or_one , and :one
|
218
|
+
cell_rows @zero_or_many_data
|
219
|
+
selection_mode :zero_or_many # other values are :none , :zero_or_one , and :one (default is :zero_or_one if not specified)
|
125
220
|
selection 0, 2, 4 # initial selection row indexes (could be empty array too or just left off)
|
221
|
+
# header_visible true # default
|
126
222
|
|
127
223
|
on_row_clicked do |t, row|
|
128
224
|
puts "Row Clicked: #{row}"
|
@@ -147,12 +243,43 @@ class BasicTableSelection
|
|
147
243
|
|
148
244
|
tab_item('None') {
|
149
245
|
vertical_box {
|
246
|
+
button('Toggle Table Header Visibility') {
|
247
|
+
stretchy false
|
248
|
+
|
249
|
+
on_clicked do
|
250
|
+
@none_table.header_visible = !@none_table.header_visible
|
251
|
+
end
|
252
|
+
}
|
253
|
+
|
150
254
|
@none_table = table {
|
151
|
-
text_column('Animal')
|
152
|
-
|
255
|
+
text_column('Animal') {
|
256
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
257
|
+
|
258
|
+
on_clicked do |tc, column|
|
259
|
+
puts "Clicked column #{column}: #{tc.name}"
|
260
|
+
selected_row = @none_table.selection && @none_data[@none_table.selection]
|
261
|
+
tc.toggle_sort_indicator
|
262
|
+
@none_data.sort_by! { |row_data| row_data[column] }
|
263
|
+
@none_data.reverse! if tc.sort_indicator == :descending
|
264
|
+
@none_table.selection = @none_data.index(selected_row)
|
265
|
+
end
|
266
|
+
}
|
267
|
+
text_column('Description') {
|
268
|
+
# sort_indicator :descending # can be :ascending, :descending, or nil (default)
|
269
|
+
|
270
|
+
on_clicked do |tc, column|
|
271
|
+
puts "Clicked column #{column}: #{tc.name}"
|
272
|
+
selected_row = @none_table.selection && @none_data[@none_table.selection]
|
273
|
+
tc.toggle_sort_indicator
|
274
|
+
@none_data.sort_by! { |row_data| row_data[column] }
|
275
|
+
@none_data.reverse! if tc.sort_indicator == :descending
|
276
|
+
@none_table.selection = @none_data.index(selected_row)
|
277
|
+
end
|
278
|
+
}
|
153
279
|
|
154
|
-
cell_rows @
|
155
|
-
selection_mode :none # other values are :zero_or_many , :zero_or_one, :one
|
280
|
+
cell_rows @none_data
|
281
|
+
selection_mode :none # other values are :zero_or_many , :zero_or_one, :one (default is :zero_or_one if not specified)
|
282
|
+
# header_visible true # default
|
156
283
|
|
157
284
|
on_row_clicked do |t, row|
|
158
285
|
puts "Row Clicked: #{row}"
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -52,7 +52,58 @@ module Glimmer
|
|
52
52
|
|
53
53
|
# actual index within table columns (disregarding extra fillings that account for DualColumn instances)
|
54
54
|
def index
|
55
|
-
@parent_proxy.
|
55
|
+
@parent_proxy.column_proxies.index(self)
|
56
|
+
end
|
57
|
+
|
58
|
+
def other_columns
|
59
|
+
@parent_proxy.column_proxies.reject {|c| c == self}
|
60
|
+
end
|
61
|
+
|
62
|
+
def sort_indicator
|
63
|
+
return @sort_indicator if !@content_added
|
64
|
+
|
65
|
+
result = ::LibUI.table_header_sort_indicator(@parent_proxy.libui, index)
|
66
|
+
LibUI.integer_to_column_sort_indicator(result)
|
67
|
+
end
|
68
|
+
|
69
|
+
def sort_indicator=(*args)
|
70
|
+
options = args.last.is_a?(Hash) ? args.pop : {reset_columns: true}
|
71
|
+
value = args.first
|
72
|
+
@sort_indicator = value
|
73
|
+
return @sort_indicator if !@content_added
|
74
|
+
|
75
|
+
other_columns.each { |c| c.set_sort_indicator(nil, reset_columns: false) } if options[:reset_columns]
|
76
|
+
value = LibUI.column_sort_indicator_to_integer(value)
|
77
|
+
::LibUI.table_header_set_sort_indicator(@parent_proxy.libui, index, value)
|
78
|
+
end
|
79
|
+
alias set_sort_indicator sort_indicator=
|
80
|
+
|
81
|
+
def toggle_sort_indicator(value = nil)
|
82
|
+
if value.nil?
|
83
|
+
self.sort_indicator = self.sort_indicator != :ascending ? :ascending : :descending
|
84
|
+
else
|
85
|
+
self.sort_indicator = value
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def can_handle_listener?(listener_name)
|
90
|
+
listener_name == 'on_clicked'
|
91
|
+
end
|
92
|
+
|
93
|
+
def handle_listener(listener_name, &listener)
|
94
|
+
column_listeners_for(listener_name) << listener
|
95
|
+
end
|
96
|
+
|
97
|
+
def column_listeners
|
98
|
+
@column_listeners ||= {}
|
99
|
+
end
|
100
|
+
|
101
|
+
def column_listeners_for(listener_name)
|
102
|
+
column_listeners[listener_name] ||= []
|
103
|
+
end
|
104
|
+
|
105
|
+
def configure_sort_indicator
|
106
|
+
set_sort_indicator(@sort_indicator, reset_columns: false)
|
56
107
|
end
|
57
108
|
end
|
58
109
|
end
|
@@ -61,8 +61,11 @@ module Glimmer
|
|
61
61
|
super
|
62
62
|
# TODO consider automatically detecting what properties/listeners accumulated dynamically to avoid hardcoding code below
|
63
63
|
register_listeners
|
64
|
+
register_column_listeners
|
64
65
|
configure_selection_mode
|
65
66
|
configure_selection
|
67
|
+
configure_header_visible
|
68
|
+
configure_column_sort_indicators
|
66
69
|
end
|
67
70
|
|
68
71
|
def post_initialize_child(child)
|
@@ -142,6 +145,7 @@ module Glimmer
|
|
142
145
|
end
|
143
146
|
end
|
144
147
|
alias selection_mode= selection_mode
|
148
|
+
alias set_selection_mode selection_mode
|
145
149
|
|
146
150
|
def selection
|
147
151
|
return @selection if !@content_added
|
@@ -171,6 +175,24 @@ module Glimmer
|
|
171
175
|
# ensure
|
172
176
|
# ::LibUI.free_table_selection(ts)
|
173
177
|
end
|
178
|
+
alias set_selection selection=
|
179
|
+
|
180
|
+
def header_visible
|
181
|
+
return @header_visible if !@content_added
|
182
|
+
|
183
|
+
result = ::LibUI.table_header_visible(@libui)
|
184
|
+
LibUI.integer_to_boolean(result)
|
185
|
+
end
|
186
|
+
|
187
|
+
def header_visible=(value)
|
188
|
+
@header_visible = value
|
189
|
+
return @header_visible if !@content_added
|
190
|
+
return if value.nil?
|
191
|
+
|
192
|
+
value = LibUI.boolean_to_integer(value)
|
193
|
+
::LibUI.table_header_set_visible(@libui, value)
|
194
|
+
end
|
195
|
+
alias set_header_visible header_visible=
|
174
196
|
|
175
197
|
def column_attributes
|
176
198
|
@column_attributes ||= columns.select {|column| column.is_a?(Column)}.map(&:name).map(&:underscore)
|
@@ -221,6 +243,10 @@ module Glimmer
|
|
221
243
|
compound_columns.index(compound_column)
|
222
244
|
end
|
223
245
|
|
246
|
+
def column_proxies
|
247
|
+
@columns&.select {|c| c.is_a?(Column)}
|
248
|
+
end
|
249
|
+
|
224
250
|
def handle_listener(listener_name, &listener)
|
225
251
|
# if content has been added, then you can register listeners immediately (without accumulation
|
226
252
|
if CUSTOM_LISTENER_NAMES.include?(listener_name.to_s) || @content_added
|
@@ -579,13 +605,40 @@ module Glimmer
|
|
579
605
|
end
|
580
606
|
end
|
581
607
|
|
608
|
+
def register_column_listeners
|
609
|
+
# register accumulated column listeners after table content is closed
|
610
|
+
return if @columns.nil? || @columns.empty?
|
611
|
+
if @columns.any? {|column| column.is_a?(Column) && !column.column_listeners_for('on_clicked').empty? }
|
612
|
+
::LibUI.table_header_on_clicked(@libui) do |_, column_index|
|
613
|
+
actual_columns = @columns.select {|column| column.is_a?(Column)}
|
614
|
+
column = actual_columns[column_index]
|
615
|
+
if column.is_a?(Column)
|
616
|
+
column_listeners = column.column_listeners_for('on_clicked')
|
617
|
+
if !column_listeners.empty?
|
618
|
+
column_listeners.each do |column_listener|
|
619
|
+
column_listener.call(column, column_index)
|
620
|
+
end
|
621
|
+
end
|
622
|
+
end
|
623
|
+
end
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
582
627
|
def configure_selection_mode
|
583
|
-
send_to_libui('selection_mode=', @selection_mode)
|
628
|
+
send_to_libui('selection_mode=', @selection_mode) if @selection_mode
|
584
629
|
end
|
585
630
|
|
586
631
|
def configure_selection
|
587
632
|
self.selection = @selection
|
588
633
|
end
|
634
|
+
|
635
|
+
def configure_header_visible
|
636
|
+
self.header_visible = @header_visible
|
637
|
+
end
|
638
|
+
|
639
|
+
def configure_column_sort_indicators
|
640
|
+
column_proxies.each {|c| c.configure_sort_indicator }
|
641
|
+
end
|
589
642
|
end
|
590
643
|
end
|
591
644
|
end
|
data/lib/glimmer/libui.rb
CHANGED
@@ -35,6 +35,33 @@ module Glimmer
|
|
35
35
|
bool.nil? ? (allow_nil ? nil : 0) : (allow_integer && bool.is_a?(Integer) ? bool : (bool.is_a?(TrueClass) || bool.is_a?(FalseClass) ? (bool == true ? 1 : 0) : (allow_nil ? nil : 0)))
|
36
36
|
end
|
37
37
|
|
38
|
+
def column_sort_indicator_to_integer(value)
|
39
|
+
return value if value.is_a?(Integer)
|
40
|
+
|
41
|
+
if value.nil?
|
42
|
+
0
|
43
|
+
elsif 'ascending'.start_with?(value.to_s)
|
44
|
+
1
|
45
|
+
elsif 'descending'.start_with?(value.to_s)
|
46
|
+
2
|
47
|
+
else
|
48
|
+
0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def integer_to_column_sort_indicator(value)
|
53
|
+
return value if value.is_a?(String) || value.is_a?(Symbol)
|
54
|
+
|
55
|
+
case value
|
56
|
+
when 1
|
57
|
+
:ascending
|
58
|
+
when 2
|
59
|
+
:descending
|
60
|
+
else
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
38
65
|
def degrees_to_radians(degrees)
|
39
66
|
((Math::PI * 2.0) / 360.00) * degrees.to_f
|
40
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|