glimmer-dsl-libui 0.0.7 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,10 +4,10 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Basic Entry', 300, 50, 1) { |w|
7
+ window('Basic Entry', 300, 50) { |w|
8
8
  horizontal_box {
9
9
  e = entry {
10
- # stretchy 1 # Smart default option for appending to horizontal_box
10
+ # stretchy true # Smart default option for appending to horizontal_box
11
11
 
12
12
  on_changed do
13
13
  puts e.text
@@ -16,7 +16,7 @@ window('Basic Entry', 300, 50, 1) { |w|
16
16
  }
17
17
 
18
18
  button('Button') {
19
- stretchy 0
19
+ stretchy false
20
20
 
21
21
  on_clicked do
22
22
  text = e.text
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('hello world', 300, 200, 1) {
7
+ window('hello world', 300, 200, true) {
8
8
  on_closing do
9
9
  puts 'Bye Bye'
10
10
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window { # first 3 args can be set via properties with 4th arg has_menubar=true by default
8
+ title 'hello world'
9
+ content_size 300, 200
10
+
11
+ on_closing do
12
+ puts 'Bye Bye'
13
+ end
14
+ }.show
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('color button', 230) {
8
+ color_button { |cb|
9
+ on_changed do
10
+ rgba = cb.color
11
+ p rgba
12
+ end
13
+ }
14
+ }.show
@@ -32,7 +32,7 @@ menu('Edit') {
32
32
  check_menu_item('Checkable Item_')
33
33
  separator_menu_item
34
34
  menu_item('Disabled Item_') {
35
- enabled 0
35
+ enabled false
36
36
  }
37
37
  }
38
38
 
@@ -42,8 +42,8 @@ menu('Help') {
42
42
  about_menu_item # Can optionally contain an on_clicked listener
43
43
  }
44
44
 
45
- MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
46
- margined 1
45
+ MAIN_WINDOW = window('Control Gallery', 600, 500) {
46
+ margined true
47
47
 
48
48
  on_closing do
49
49
  puts 'Bye Bye'
@@ -54,7 +54,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
54
54
  group('Basic Controls') {
55
55
  vertical_box {
56
56
  button('Button') {
57
- stretchy 0
57
+ stretchy false
58
58
 
59
59
  on_clicked do
60
60
  msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
@@ -62,38 +62,38 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
62
62
  }
63
63
 
64
64
  checkbox('Checkbox') {
65
- stretchy 0
65
+ stretchy false
66
66
 
67
67
  on_toggled do |c|
68
- checked = c.checked == 1
68
+ checked = c.checked?
69
69
  MAIN_WINDOW.title = "Checkbox is #{checked}"
70
70
  c.text = "I am the checkbox (#{checked})"
71
71
  end
72
72
  }
73
73
 
74
- label('Label') { stretchy 0 }
74
+ label('Label') { stretchy false }
75
75
 
76
- horizontal_separator { stretchy 0 }
76
+ horizontal_separator { stretchy false }
77
77
 
78
- date_picker { stretchy 0 }
78
+ date_picker { stretchy false }
79
79
 
80
- time_picker { stretchy 0 }
80
+ time_picker { stretchy false }
81
81
 
82
- date_time_picker { stretchy 0 }
82
+ date_time_picker { stretchy false }
83
83
 
84
- font_button { stretchy 0 }
84
+ font_button { stretchy false }
85
85
 
86
- color_button { stretchy 0 }
86
+ color_button { stretchy false }
87
87
  }
88
88
  }
89
89
 
90
90
  vertical_box {
91
91
  group('Numbers') {
92
- stretchy 0
92
+ stretchy false
93
93
 
94
94
  vertical_box {
95
95
  spinbox(0, 100) {
96
- stretchy 0
96
+ stretchy false
97
97
  value 42
98
98
 
99
99
  on_changed do |s|
@@ -102,7 +102,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
102
102
  }
103
103
 
104
104
  slider(0, 100) {
105
- stretchy 0
105
+ stretchy false
106
106
 
107
107
  on_changed do |s|
108
108
  v = s.value
@@ -111,16 +111,16 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
111
111
  end
112
112
  }
113
113
 
114
- @progress_bar = progress_bar { stretchy 0 }
114
+ @progress_bar = progress_bar { stretchy false }
115
115
  }
116
116
  }
117
117
 
118
118
  group('Lists') {
119
- stretchy 0
119
+ stretchy false
120
120
 
121
121
  vertical_box {
122
122
  combobox {
123
- stretchy 0
123
+ stretchy false
124
124
  items 'combobox Item 1', 'combobox Item 2', 'combobox Item 3' # also accepts a single array argument
125
125
 
126
126
  on_selected do |c|
@@ -129,7 +129,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
129
129
  }
130
130
 
131
131
  editable_combobox {
132
- stretchy 0
132
+ stretchy false
133
133
  items 'Editable Item 1', 'Editable Item 2', 'Editable Item 3' # also accepts a single array argument
134
134
  }
135
135
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('hello world', 300, 200) {
8
+ font_button { |fb|
9
+ on_changed do
10
+ font_descriptor = fb.font
11
+ p font_descriptor
12
+ end
13
+ }
14
+
15
+ on_closing do
16
+ puts 'Bye Bye'
17
+ end
18
+ }.show
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+ require 'facets'
5
+
6
+ class MetaExample
7
+ include Glimmer
8
+
9
+ def examples
10
+ if @examples.nil?
11
+ example_files = Dir.glob(File.join(File.expand_path('.', __dir__), '**', '*.rb'))
12
+ example_file_names = example_files.map { |f| File.basename(f, '.rb') }
13
+ example_file_names = example_file_names.reject { |f| f == 'meta_example' }
14
+ @examples = example_file_names.map { |f| f.underscore.titlecase }
15
+ end
16
+ @examples
17
+ end
18
+
19
+ def file_path_for(example)
20
+ File.join(File.expand_path('.', __dir__), "#{example.underscore}.rb")
21
+ end
22
+
23
+ def launch
24
+ window('Meta-Example', 700, 500) { |w|
25
+ margined true
26
+
27
+ horizontal_box {
28
+ vertical_box {
29
+ @rbs = radio_buttons {
30
+ stretchy false
31
+ items examples
32
+ selected 0
33
+
34
+ on_selected do
35
+ @nwme.text = File.read(file_path_for(@examples[@rbs.selected]))
36
+ end
37
+ }
38
+ button('Launch') {
39
+ stretchy false
40
+
41
+ on_clicked do
42
+ system "ruby -r puts_debuggerer -r #{File.expand_path('../lib/glimmer-dsl-libui', __dir__)} #{file_path_for(@examples[@rbs.selected])}"
43
+ end
44
+ }
45
+ }
46
+ vertical_box {
47
+ @nwme = non_wrapping_multiline_entry {
48
+ read_only true
49
+ text File.read(file_path_for(@examples[@rbs.selected]))
50
+ }
51
+ }
52
+ }
53
+ }.show
54
+ end
55
+ end
56
+
57
+ MetaExample.new.launch
@@ -56,10 +56,10 @@ class TinyMidiPlayer
56
56
  end
57
57
  }
58
58
  }
59
- @main_window = window('Tiny Midi Player', 200, 50, 1) {
59
+ @main_window = window('Tiny Midi Player', 200, 50) {
60
60
  horizontal_box {
61
61
  vertical_box {
62
- stretchy 0
62
+ stretchy false
63
63
 
64
64
  button('▶') {
65
65
  on_clicked do
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Notepad', 500, 300, 1) {
7
+ window('Notepad', 500, 300) {
8
8
  on_closing do
9
9
  puts 'Bye Bye'
10
10
  end
Binary file
@@ -19,25 +19,37 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ require 'glimmer/libui/control_proxy'
23
+
22
24
  module Glimmer
23
25
  module LibUI
24
26
  module Box
25
27
  APPEND_PROPERTIES = %w[stretchy]
26
28
 
27
29
  def post_initialize_child(child)
28
- child.stretchy = 1 if child.stretchy.nil?
29
- ::LibUI.box_append(@libui, child.libui, child.stretchy)
30
+ child.stretchy = true if child.stretchy.nil?
31
+ ::LibUI.box_append(@libui, child.libui, ControlProxy.boolean_to_integer(child.stretchy))
32
+ children << child
30
33
  end
31
34
 
32
35
  def libui_api_keyword
33
36
  'box'
34
37
  end
35
38
 
39
+ def children
40
+ @children ||= []
41
+ end
42
+
43
+ def destroy_child(child)
44
+ ::LibUI.send("box_delete", @libui, children.index(child))
45
+ ControlProxy.all_control_proxies.delete(child)
46
+ end
47
+
36
48
  private
37
49
 
38
50
  def build_control
39
51
  super.tap do
40
- self.padded = 1
52
+ self.padded = true
41
53
  end
42
54
  end
43
55
  end
@@ -0,0 +1,64 @@
1
+ # Copyright (c) 2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/libui/control_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI color button objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class ColorButtonProxy < ControlProxy
30
+ def color
31
+ @red ||= Fiddle::Pointer.malloc(8) # double
32
+ @green ||= Fiddle::Pointer.malloc(8) # double
33
+ @blue ||= Fiddle::Pointer.malloc(8) # double
34
+ @alpha ||= Fiddle::Pointer.malloc(8) # double
35
+ ::LibUI.color_button_color(@libui, @red, @green, @blue, @alpha)
36
+ [@red[0, 8].unpack1('d') * 255.0, @green[0, 8].unpack1('d') * 255.0, @blue[0, 8].unpack1('d') * 255.0, @alpha[0, 8].unpack1('d')]
37
+ end
38
+
39
+ def red
40
+ color[0]
41
+ end
42
+
43
+ def green
44
+ color[1]
45
+ end
46
+
47
+ def blue
48
+ color[2]
49
+ end
50
+
51
+ def alpha
52
+ color[3]
53
+ end
54
+
55
+ def destroy
56
+ Fiddle.free @red unless @red.nil?
57
+ Fiddle.free @green unless @green.nil?
58
+ Fiddle.free @blue unless @blue.nil?
59
+ Fiddle.free @alpha unless @alpha.nil?
60
+ super
61
+ end
62
+ end
63
+ end
64
+ end
@@ -52,10 +52,37 @@ module Glimmer
52
52
  end
53
53
 
54
54
  def main_window_proxy
55
- all_control_proxies.find {|c| c.is_a?(WindowProxy)}
55
+ all_control_proxies.find {|c| c.is_a?(Glimmer::LibUI::WindowProxy)}
56
+ end
57
+
58
+ def integer_to_boolean(int)
59
+ int.nil? ? nil : int == 1
60
+ end
61
+
62
+ def boolean_to_integer(bool)
63
+ bool.nil? ? nil : (bool ? 1 : 0)
64
+ end
65
+
66
+ def menu_proxies
67
+ all_control_proxies.select {|c| c.keyword == 'menu' }
56
68
  end
57
69
  end
58
70
 
71
+ BOOLEAN_PROPERTIES = %w[
72
+ padded
73
+ checked
74
+ enabled toplevel visible
75
+ read_only
76
+ margined
77
+ borderless fullscreen
78
+ stretchy
79
+ ]
80
+
81
+ STRING_PROPERTIES = %w[
82
+ text
83
+ title
84
+ ]
85
+
59
86
  # libui returns the contained LibUI object
60
87
  attr_reader :parent_proxy, :libui, :args, :keyword
61
88
 
@@ -64,11 +91,8 @@ module Glimmer
64
91
  @parent_proxy = parent
65
92
  @args = args
66
93
  @block = block
67
- @enabled = 1
94
+ @enabled = true
68
95
  build_control
69
- if @parent_proxy.class.constants.include?(:APPEND_PROPERTIES)
70
- @parent_proxy.class::APPEND_PROPERTIES
71
- end
72
96
  post_add_content if @block.nil?
73
97
  end
74
98
 
@@ -106,21 +130,28 @@ module Glimmer
106
130
 
107
131
  def respond_to?(method_name, *args, &block)
108
132
  respond_to_libui?(method_name, *args, &block) ||
109
- (append_properties.include?(method_name.to_s) || append_properties.include?(method_name.to_s.sub(/=$/, ''))) ||
133
+ (
134
+ append_properties.include?(method_name.to_s) ||
135
+ (append_properties.include?(method_name.to_s.sub(/\?$/, '')) && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, ''))) ||
136
+ append_properties.include?(method_name.to_s.sub(/=$/, ''))
137
+ ) ||
110
138
  super(method_name, true)
111
139
  end
112
140
 
113
141
  def respond_to_libui?(method_name, *args, &block)
114
142
  ::LibUI.respond_to?("control_#{method_name}") ||
143
+ (::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
144
+ ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}") ||
115
145
  ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") ||
116
- ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name}") ||
146
+ (::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
117
147
  ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}")
118
148
  end
119
149
 
120
150
  def method_missing(method_name, *args, &block)
121
151
  if respond_to_libui?(method_name, *args, &block)
122
152
  send_to_libui(method_name, *args, &block)
123
- elsif (append_properties.include?(method_name.to_s) || append_properties.include?(method_name.to_s.sub(/=$/, '')))
153
+ elsif append_properties.include?(method_name.to_s) ||
154
+ append_properties.include?(method_name.to_s.sub(/(=|\?)$/, ''))
124
155
  append_property(method_name, *args)
125
156
  else
126
157
  super
@@ -128,17 +159,25 @@ module Glimmer
128
159
  end
129
160
 
130
161
  def send_to_libui(method_name, *args, &block)
131
- if ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && args.empty?
132
- ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
133
- elsif ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name}") && !args.empty?
134
- ::LibUI.send("#{libui_api_keyword}_set_#{method_name}", @libui, *args)
162
+ if ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
163
+ property = method_name.to_s.sub(/\?$/, '')
164
+ value = ::LibUI.send("#{libui_api_keyword}_#{property}", @libui, *args)
165
+ handle_string_property(property, handle_boolean_property(property, value))
135
166
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}") && !args.empty?
136
- ::LibUI.send("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}", @libui, *args)
137
- elsif ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && method_name.start_with?('set_') && !args.empty?
138
- ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
167
+ property = method_name.to_s.sub(/=$/, '')
168
+ args[0] = ControlProxy.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
169
+ ::LibUI.send("#{libui_api_keyword}_set_#{property}", @libui, *args)
139
170
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && !args.empty?
140
171
  ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
141
- elsif ::LibUI.respond_to?("control_#{method_name}")
172
+ elsif ::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
173
+ property = method_name.to_s.sub(/\?$/, '')
174
+ value = ::LibUI.send("control_#{property}", @libui, *args)
175
+ handle_string_property(property, handle_boolean_property(property, value))
176
+ elsif ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}")
177
+ property = method_name.to_s.sub(/=$/, '')
178
+ args[0] = ControlProxy.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
179
+ ::LibUI.send("control_set_#{method_name.to_s.sub(/=$/, '')}", @libui, *args)
180
+ elsif ::LibUI.respond_to?("control_#{method_name}") && !args.empty?
142
181
  ::LibUI.send("control_#{method_name}", @libui, *args)
143
182
  end
144
183
  end
@@ -148,11 +187,13 @@ module Glimmer
148
187
  end
149
188
 
150
189
  def append_property(property, value = nil)
151
- property = property.to_s.sub(/=$/, '')
190
+ property = property.to_s.sub(/(=|\?)$/, '')
152
191
  @append_property_hash ||= {}
153
192
  if value.nil?
154
- @append_property_hash[property]
193
+ value = @append_property_hash[property]
194
+ handle_string_property(property, handle_boolean_property(property, value))
155
195
  else
196
+ value = ControlProxy.boolean_to_integer(value) if BOOLEAN_PROPERTIES.include?(property) && (value.is_a?(TrueClass) || value.is_a?(FalseClass))
156
197
  @append_property_hash[property] = value
157
198
  end
158
199
  end
@@ -161,11 +202,28 @@ module Glimmer
161
202
  @keyword
162
203
  end
163
204
 
205
+ def destroy
206
+ if parent_proxy.nil?
207
+ default_destroy
208
+ else
209
+ parent_proxy.destroy_child(self)
210
+ end
211
+ end
212
+
213
+ def destroy_child(child)
214
+ child.default_destroy
215
+ end
216
+
217
+ def default_destroy
218
+ send_to_libui('destroy')
219
+ ControlProxy.all_control_proxies.delete(self)
220
+ end
221
+
164
222
  def enabled(value = nil)
165
223
  if value.nil?
166
224
  @enabled
167
225
  elsif value != @enabled
168
- if value == 1
226
+ if value == 1 || value
169
227
  send_to_libui('enable')
170
228
  else
171
229
  send_to_libui('disable')
@@ -181,7 +239,7 @@ module Glimmer
181
239
  if value.nil?
182
240
  current_value
183
241
  elsif value != current_value
184
- if value == 1
242
+ if value == 1 || value
185
243
  send_to_libui('show')
186
244
  else
187
245
  send_to_libui('hide')
@@ -192,11 +250,6 @@ module Glimmer
192
250
  alias set_visible visible
193
251
  alias visible= visible
194
252
 
195
- def destroy
196
- send_to_libui('destroy')
197
- self.class.all_control_proxies.delete(self)
198
- end
199
-
200
253
  private
201
254
 
202
255
  def build_control
@@ -207,6 +260,14 @@ module Glimmer
207
260
  ::LibUI.send(@keyword, *@args)
208
261
  end
209
262
  end
263
+
264
+ def handle_boolean_property(property, value)
265
+ BOOLEAN_PROPERTIES.include?(property) ? ControlProxy.integer_to_boolean(value) : value
266
+ end
267
+
268
+ def handle_string_property(property, value)
269
+ STRING_PROPERTIES.include?(property) ? value.to_s : value
270
+ end
210
271
  end
211
272
  end
212
273
  end
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/libui/date_time_picker_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI date picker objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class DatePickerProxy < DateTimePickerProxy
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ # Copyright (c) 2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/libui/control_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI date time picker objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class DateTimePickerProxy < ControlProxy
30
+ def libui_api_keyword
31
+ 'date_time_picker'
32
+ end
33
+ end
34
+ end
35
+ end