glimmer-dsl-libui 0.5.16 → 0.5.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -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