glimmer-dsl-libui 0.5.16 → 0.5.19

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.
@@ -6,148 +6,21 @@ class PaginatedRefinedTable
6
6
  include Glimmer::LibUI::Application
7
7
 
8
8
  NAMES_FIRST = %w[
9
- Liam
10
- Noah
11
- William
12
- James
13
- Oliver
14
- Benjamin
15
- Elijah
16
- Lucas
17
- Mason
18
- Logan
19
- Alexander
20
- Ethan
21
- Jacob
22
- Michael
23
- Daniel
24
- Henry
25
- Jackson
26
- Sebastian
27
- Aiden
28
- Matthew
29
- Samuel
30
- David
31
- Joseph
32
- Carter
33
- Owen
34
- Wyatt
35
- John
36
- Jack
37
- Luke
38
- Jayden
39
- Dylan
40
- Grayson
41
- Levi
42
- Isaac
43
- Gabriel
44
- Julian
45
- Mateo
46
- Anthony
47
- Jaxon
48
- Lincoln
49
- Joshua
50
- Christopher
51
- Andrew
52
- Theodore
53
- Caleb
54
- Ryan
55
- Asher
56
- Nathan
57
- Thomas
58
- Leo
59
- Isaiah
60
- Charles
61
- Josiah
62
- Hudson
63
- Christian
64
- Hunter
65
- Connor
66
- Eli
67
- Ezra
68
- Aaron
69
- Landon
70
- Adrian
71
- Jonathan
72
- Nolan
73
- Jeremiah
74
- Easton
75
- Elias
76
- Colton
77
- Cameron
78
- Carson
79
- Robert
80
- Angel
81
- Maverick
82
- Nicholas
83
- Dominic
84
- Jaxson
85
- Greyson
86
- Adam
87
- Ian
88
- Austin
89
- Santiago
90
- Jordan
91
- Cooper
92
- Brayden
93
- Roman
94
- Evan
95
- Ezekiel
96
- Xaviar
97
- Jose
98
- Jace
99
- Jameson
100
- Leonardo
101
- Axel
102
- Everett
103
- Kayden
104
- Miles
105
- Sawyer
106
- Jason
107
- Emma
108
- Olivia
109
- Bartholomew
110
- Corey
111
- Danielle
112
- Eva
113
- Felicity
9
+ Liam Noah William James Oliver Benjamin Elijah Lucas Mason Logan Alexander Ethan Jacob Michael Daniel Henry Jackson Sebastian
10
+ Aiden Matthew Samuel David Joseph Carter Owen Wyatt John Jack Luke Jayden Dylan Grayson Levi Isaac Gabriel Julian Mateo
11
+ Anthony Jaxon Lincoln Joshua Christopher Andrew Theodore Caleb Ryan Asher Nathan Thomas Leo Isaiah Charles Josiah Hudson
12
+ Christian Hunter Connor Eli Ezra Aaron Landon Adrian Jonathan Nolan Jeremiah Easton Elias Colton Cameron Carson Robert Angel
13
+ Maverick Nicholas Dominic Jaxson Greyson Adam Ian Austin Santiago Jordan Cooper Brayden Roman Evan Ezekiel Xaviar Jose Jace
14
+ Jameson Leonardo Axel Everett Kayden Miles Sawyer Jason Emma Olivia Bartholomew Corey Danielle Eva Felicity
114
15
  ]
115
16
 
116
17
  NAMES_LAST = %w[
117
- Smith
118
- Johnson
119
- Williams
120
- Brown
121
- Jones
122
- Miller
123
- Davis
124
- Wilson
125
- Anderson
126
- Taylor
127
- George
128
- Harrington
129
- Iverson
130
- Jackson
131
- Korby
132
- Levinson
18
+ Smith Johnson Williams Brown Jones Miller Davis Wilson Anderson Taylor George Harrington Iverson Jackson Korby Levinson
133
19
  ]
134
20
 
135
21
  CITIES = [
136
- 'Bellesville',
137
- 'Lombardia',
138
- 'Steepleton',
139
- 'Deerenstein',
140
- 'Schwartz',
141
- 'Hollandia',
142
- 'Saint Pete',
143
- 'Grandville',
144
- 'London',
145
- 'Berlin',
146
- 'Elktown',
147
- 'Paris',
148
- 'Garrison',
149
- 'Muncy',
150
- 'St Louis',
22
+ 'Bellesville', 'Lombardia', 'Steepleton', 'Deerenstein', 'Schwartz', 'Hollandia', 'Saint Pete', 'Grandville', 'London',
23
+ 'Berlin', 'Elktown', 'Paris', 'Garrison', 'Muncy', 'St Louis',
151
24
  ]
152
25
 
153
26
  STATES = [ 'AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA',
@@ -233,6 +106,8 @@ class PaginatedRefinedTable
233
106
  },
234
107
  table_editable: true,
235
108
  per_page: 20,
109
+ # page: 1, # initial page is 1
110
+ # visible_page_count: true, # page count can be hidden if preferred
236
111
  )
237
112
  }
238
113
  }
Binary file
@@ -6,24 +6,36 @@ class RefinedTable
6
6
  option :table_editable, default: false
7
7
  option :per_page, default: 10
8
8
  option :page, default: 1
9
+ option :visible_page_count, default: false
10
+ option :filter_query, default: ''
9
11
 
10
- attr_accessor :filtered_model_array, :filter_query, :filter_query_page_stack, :paginated_model_array
12
+ attr_accessor :filtered_model_array # filtered model array (intermediary, non-paginated)
13
+ attr_accessor :refined_model_array # paginated filtered model array
14
+ attr_reader :table_proxy
11
15
 
12
16
  before_body do
13
- @filter_query = ''
14
- @filter_query_page_stack = {}
15
- @filtered_model_array = model_array.dup
16
- @filtered_model_array_stack = {@filter_query => @filtered_model_array}
17
- paginate_model_array
17
+ init_model_array
18
+ end
19
+
20
+ after_body do
21
+ filter_model_array
22
+
23
+ observe(self, :model_array) do
24
+ init_model_array
25
+ end
26
+
27
+ observe(self, :filter_query) do
28
+ filter_model_array
29
+ end
18
30
  end
19
31
 
20
32
  body {
21
33
  vertical_box {
22
34
  table_filter
23
35
 
24
- table_paginator
36
+ table_paginator if page_count > 1
25
37
 
26
- @table = table {
38
+ @table_proxy = table {
27
39
  table_columns.each do |column_name, column_details|
28
40
  editable_value = on_clicked_value = nil
29
41
  if column_details.is_a?(Symbol) || column_details.is_a?(String)
@@ -41,7 +53,7 @@ class RefinedTable
41
53
  end
42
54
 
43
55
  editable table_editable
44
- cell_rows <=> [self, :paginated_model_array]
56
+ cell_rows <=> [self, :refined_model_array]
45
57
  }
46
58
  }
47
59
  }
@@ -49,33 +61,17 @@ class RefinedTable
49
61
  def table_filter
50
62
  search_entry {
51
63
  stretchy false
52
- text <=> [self, :filter_query,
53
- before_write: ->(new_filter_query) {
54
- if new_filter_query != filter_query
55
- if !@filtered_model_array_stack.key?(new_filter_query)
56
- @filtered_model_array_stack[new_filter_query] = model_array.dup.filter do |model|
57
- @table.expand([model])[0].any? do |attribute_value|
58
- attribute_value.to_s.downcase.include?(new_filter_query.downcase)
59
- end
60
- end
61
- end
62
- @filtered_model_array = @filtered_model_array_stack[new_filter_query]
63
- if new_filter_query.size > filter_query.size
64
- @filter_query_page_stack[filter_query] = page
65
- end
66
- self.page = @filter_query_page_stack[new_filter_query] || correct_page(page)
67
- paginate_model_array
68
- end
69
- }
70
- ]
64
+ text <=> [self, :filter_query]
71
65
  }
72
66
  end
73
67
 
74
68
  def table_paginator
75
69
  horizontal_box {
76
70
  stretchy false
77
-
71
+
78
72
  button('<<') {
73
+ enabled <= [self, :page, on_read: ->(val) {val > 1}]
74
+
79
75
  on_clicked do
80
76
  unless self.page == 0
81
77
  self.page = 1
@@ -83,7 +79,10 @@ class RefinedTable
83
79
  end
84
80
  end
85
81
  }
82
+
86
83
  button('<') {
84
+ enabled <= [self, :page, on_read: ->(val) {val > 1}]
85
+
87
86
  on_clicked do
88
87
  unless self.page == 0
89
88
  self.page = [page - 1, 1].max
@@ -91,6 +90,7 @@ class RefinedTable
91
90
  end
92
91
  end
93
92
  }
93
+
94
94
  entry {
95
95
  text <=> [self, :page,
96
96
  on_read: :to_s,
@@ -98,7 +98,16 @@ class RefinedTable
98
98
  after_write: ->(val) { paginate_model_array },
99
99
  ]
100
100
  }
101
+
102
+ if visible_page_count
103
+ label {
104
+ text <= [self, :refined_model_array, on_read: ->(val) {"of #{page_count} pages"}]
105
+ }
106
+ end
107
+
101
108
  button('>') {
109
+ enabled <= [self, :page, on_read: ->(val) {val < page_count}]
110
+
102
111
  on_clicked do
103
112
  unless self.page == 0
104
113
  self.page = [page + 1, page_count].min
@@ -106,7 +115,10 @@ class RefinedTable
106
115
  end
107
116
  end
108
117
  }
118
+
109
119
  button('>>') {
120
+ enabled <= [self, :page, on_read: ->(val) {val < page_count}]
121
+
110
122
  on_clicked do
111
123
  unless self.page == 0
112
124
  self.page = page_count
@@ -117,8 +129,35 @@ class RefinedTable
117
129
  }
118
130
  end
119
131
 
132
+ def init_model_array
133
+ @last_filter_query = nil
134
+ @filter_query_page_stack = {}
135
+ @filtered_model_array = model_array.dup
136
+ @filtered_model_array_stack = {'' => @filtered_model_array}
137
+ self.page = correct_page(page)
138
+ filter_model_array if @table_proxy
139
+ end
140
+
141
+ def filter_model_array
142
+ return unless (@last_filter_query.nil? || filter_query != @last_filter_query)
143
+ if !@filtered_model_array_stack.key?(filter_query)
144
+ @filtered_model_array_stack[filter_query] = model_array.dup.filter do |model|
145
+ @table_proxy.expand([model])[0].any? do |attribute_value|
146
+ attribute_value.to_s.downcase.include?(filter_query.downcase)
147
+ end
148
+ end
149
+ end
150
+ @filtered_model_array = @filtered_model_array_stack[filter_query]
151
+ if @last_filter_query.nil? || filter_query.size > @last_filter_query.size
152
+ @filter_query_page_stack[filter_query] = correct_page(page)
153
+ end
154
+ self.page = @filter_query_page_stack[filter_query] || correct_page(page)
155
+ paginate_model_array
156
+ @last_filter_query = filter_query
157
+ end
158
+
120
159
  def paginate_model_array
121
- self.paginated_model_array = filtered_model_array[index, limit]
160
+ self.refined_model_array = filtered_model_array[index, limit]
122
161
  end
123
162
 
124
163
  def index
@@ -137,15 +176,15 @@ class RefinedTable
137
176
  [[page, 1].max, page_count].min
138
177
  end
139
178
 
140
- # Ensure proxying properties to @table if body_root (vertical_box) doesn't support them
179
+ # Ensure proxying properties to @table_proxy if body_root (vertical_box) doesn't support them
141
180
 
142
181
  def respond_to?(method_name, *args, &block)
143
- super || @table&.respond_to?(method_name, *args, &block)
182
+ super || @table_proxy&.respond_to?(method_name, *args, &block)
144
183
  end
145
184
 
146
185
  def method_missing(method_name, *args, &block)
147
- if @table&.respond_to?(method_name, *args, &block)
148
- @table&.send(method_name, *args, &block)
186
+ if @table_proxy&.respond_to?(method_name, *args, &block)
187
+ @table_proxy&.send(method_name, *args, &block)
149
188
  else
150
189
  super
151
190
  end
@@ -31,8 +31,17 @@ module Glimmer
31
31
 
32
32
  class << self
33
33
  def launch(*args, &content)
34
- launched_custom_shell = send(keyword, *args, &content)
35
- launched_custom_shell.show
34
+ @@launched_custom_window = send(keyword, *args, &content)
35
+ @@launched_custom_window.show
36
+ @@launched_custom_window
37
+ end
38
+
39
+ def launched_custom_window
40
+ @@launched_custom_window if defined?(@@launched_custom_window)
41
+ end
42
+
43
+ def launched_application
44
+ launched_custom_window
36
45
  end
37
46
  end
38
47
 
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.5.16
4
+ version: 0.5.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-31 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -275,6 +275,8 @@ files:
275
275
  - VERSION
276
276
  - bin/girb
277
277
  - bin/girb_runner.rb
278
+ - docs/examples/GLIMMER-DSL-LIBUI-ADVANCED-EXAMPLES.md
279
+ - docs/examples/GLIMMER-DSL-LIBUI-BASIC-EXAMPLES.md
278
280
  - examples/area_based_custom_controls.rb
279
281
  - examples/area_gallery.rb
280
282
  - examples/area_gallery2.rb