glimmer-dsl-libui 0.1.7 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -46,5 +46,53 @@ window('Area Gallery', 400, 400) {
46
46
  fill r: 202, g: 102, b: 204, a: 0.5
47
47
  stroke r: 0, g: 0, b: 0, thickness: 2
48
48
  }
49
+
50
+ on_mouse_event do |area_mouse_event|
51
+ p area_mouse_event
52
+ end
53
+
54
+ on_mouse_moved do |area_mouse_event|
55
+ puts 'moved'
56
+ end
57
+
58
+ on_mouse_down do |area_mouse_event|
59
+ puts 'mouse down'
60
+ end
61
+
62
+ on_mouse_up do |area_mouse_event|
63
+ puts 'mouse up'
64
+ end
65
+
66
+ on_mouse_drag_started do |area_mouse_event|
67
+ puts 'drag started'
68
+ end
69
+
70
+ on_mouse_dragged do |area_mouse_event|
71
+ puts 'dragged'
72
+ end
73
+
74
+ on_mouse_dropped do |area_mouse_event|
75
+ puts 'dropped'
76
+ end
77
+
78
+ on_mouse_entered do
79
+ puts 'entered'
80
+ end
81
+
82
+ on_mouse_exited do
83
+ puts 'exited'
84
+ end
85
+
86
+ on_key_event do |area_key_event|
87
+ p area_key_event
88
+ end
89
+
90
+ on_key_up do |area_key_event|
91
+ puts 'key up'
92
+ end
93
+
94
+ on_key_down do |area_key_event|
95
+ puts 'key down'
96
+ end
49
97
  }
50
98
  }.show
@@ -107,5 +107,53 @@ window('Area Gallery', 400, 400) {
107
107
  fill r: 202, g: 102, b: 204, a: 0.5
108
108
  stroke r: 0, g: 0, b: 0, thickness: 2
109
109
  }
110
+
111
+ on_mouse_event do |area_mouse_event|
112
+ p area_mouse_event
113
+ end
114
+
115
+ on_mouse_moved do |area_mouse_event|
116
+ puts 'moved'
117
+ end
118
+
119
+ on_mouse_down do |area_mouse_event|
120
+ puts 'mouse down'
121
+ end
122
+
123
+ on_mouse_up do |area_mouse_event|
124
+ puts 'mouse up'
125
+ end
126
+
127
+ on_mouse_drag_started do |area_mouse_event|
128
+ puts 'drag started'
129
+ end
130
+
131
+ on_mouse_dragged do |area_mouse_event|
132
+ puts 'dragged'
133
+ end
134
+
135
+ on_mouse_dropped do |area_mouse_event|
136
+ puts 'dropped'
137
+ end
138
+
139
+ on_mouse_entered do
140
+ puts 'entered'
141
+ end
142
+
143
+ on_mouse_exited do
144
+ puts 'exited'
145
+ end
146
+
147
+ on_key_event do |area_key_event|
148
+ p area_key_event
149
+ end
150
+
151
+ on_key_up do |area_key_event|
152
+ puts 'key up'
153
+ end
154
+
155
+ on_key_down do |area_key_event|
156
+ puts 'key down'
157
+ end
110
158
  }
111
159
  }.show
@@ -48,5 +48,53 @@ window('Area Gallery', 400, 400) {
48
48
  stroke r: 0, g: 0, b: 0, thickness: 2
49
49
  }
50
50
  end
51
+
52
+ on_mouse_event do |area_mouse_event|
53
+ p area_mouse_event
54
+ end
55
+
56
+ on_mouse_moved do |area_mouse_event|
57
+ puts 'moved'
58
+ end
59
+
60
+ on_mouse_down do |area_mouse_event|
61
+ puts 'mouse down'
62
+ end
63
+
64
+ on_mouse_up do |area_mouse_event|
65
+ puts 'mouse up'
66
+ end
67
+
68
+ on_mouse_drag_started do |area_mouse_event|
69
+ puts 'drag started'
70
+ end
71
+
72
+ on_mouse_dragged do |area_mouse_event|
73
+ puts 'dragged'
74
+ end
75
+
76
+ on_mouse_dropped do |area_mouse_event|
77
+ puts 'dropped'
78
+ end
79
+
80
+ on_mouse_entered do
81
+ puts 'entered'
82
+ end
83
+
84
+ on_mouse_exited do
85
+ puts 'exited'
86
+ end
87
+
88
+ on_key_event do |area_key_event|
89
+ p area_key_event
90
+ end
91
+
92
+ on_key_up do |area_key_event|
93
+ puts 'key up'
94
+ end
95
+
96
+ on_key_down do |area_key_event|
97
+ puts 'key down'
98
+ end
51
99
  }
52
100
  }.show
@@ -109,5 +109,53 @@ window('Area Gallery', 400, 400) {
109
109
  stroke r: 0, g: 0, b: 0, thickness: 2
110
110
  }
111
111
  end
112
+
113
+ on_mouse_event do |area_mouse_event|
114
+ p area_mouse_event
115
+ end
116
+
117
+ on_mouse_moved do |area_mouse_event|
118
+ puts 'moved'
119
+ end
120
+
121
+ on_mouse_down do |area_mouse_event|
122
+ puts 'mouse down'
123
+ end
124
+
125
+ on_mouse_up do |area_mouse_event|
126
+ puts 'mouse up'
127
+ end
128
+
129
+ on_mouse_drag_started do |area_mouse_event|
130
+ puts 'drag started'
131
+ end
132
+
133
+ on_mouse_dragged do |area_mouse_event|
134
+ puts 'dragged'
135
+ end
136
+
137
+ on_mouse_dropped do |area_mouse_event|
138
+ puts 'dropped'
139
+ end
140
+
141
+ on_mouse_entered do
142
+ puts 'entered'
143
+ end
144
+
145
+ on_mouse_exited do
146
+ puts 'exited'
147
+ end
148
+
149
+ on_key_event do |area_key_event|
150
+ p area_key_event
151
+ end
152
+
153
+ on_key_up do |area_key_event|
154
+ puts 'key up'
155
+ end
156
+
157
+ on_key_down do |area_key_event|
158
+ puts 'key down'
159
+ end
112
160
  }
113
161
  }.show
@@ -78,7 +78,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500) {
78
78
  date_picker { stretchy false }
79
79
 
80
80
  time_picker { stretchy false }
81
-
81
+
82
82
  date_time_picker { stretchy false }
83
83
 
84
84
  font_button { stretchy false }
@@ -45,6 +45,7 @@ window('Contacts', 600, 600) { |w|
45
45
  msg_box_error(w, 'Validation Error!', 'All fields are required! Please make sure to enter a value for all fields.')
46
46
  else
47
47
  data << new_row # automatically inserts a row into the table due to implicit data-binding
48
+ @unfiltered_data = data.dup
48
49
  @name_entry.text = ''
49
50
  @email_entry.text = ''
50
51
  @phone_entry.text = ''
@@ -54,6 +55,25 @@ window('Contacts', 600, 600) { |w|
54
55
  end
55
56
  }
56
57
 
58
+ search_entry { |se|
59
+ stretchy false
60
+
61
+ on_changed do
62
+ filter_value = se.text
63
+ @unfiltered_data ||= data.dup
64
+ # Unfilter first to remove any previous filters
65
+ data.replace(@unfiltered_data) # affects table indirectly through implicit data-binding
66
+ # Now, apply filter if entered
67
+ unless filter_value.empty?
68
+ data.filter! do |row_data| # affects table indirectly through implicit data-binding
69
+ row_data.any? do |cell|
70
+ cell.to_s.downcase.include?(filter_value.downcase)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ }
76
+
57
77
  table {
58
78
  text_column('Name')
59
79
  text_column('Email')
data/examples/grid.rb CHANGED
@@ -6,7 +6,7 @@ include Glimmer
6
6
 
7
7
  window('Grid') {
8
8
  tab {
9
- tab_item('Spanning') {
9
+ tab_item('Span') {
10
10
  grid {
11
11
  4.times { |top_value|
12
12
  4.times { |left_value|
@@ -46,7 +46,7 @@ window('Grid') {
46
46
  }
47
47
  }
48
48
  }
49
- tab_item('Expanding') {
49
+ tab_item('Expand') {
50
50
  grid {
51
51
  label("(0, 0) hexpand/vexpand\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
52
52
  left 0
@@ -68,5 +68,41 @@ window('Grid') {
68
68
  }
69
69
  }
70
70
  }
71
+ tab_item('Align') {
72
+ grid {
73
+ label("(0, 0) halign/valign fill\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
74
+ left 0
75
+ top 0
76
+ hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
77
+ vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
78
+ halign :fill
79
+ valign :fill
80
+ }
81
+ label("(1, 0) halign/valign start") {
82
+ left 1
83
+ top 0
84
+ hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
85
+ vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
86
+ halign :start
87
+ valign :start
88
+ }
89
+ label("(0, 1) halign/valign center") {
90
+ left 0
91
+ top 1
92
+ hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
93
+ vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
94
+ halign :center
95
+ valign :center
96
+ }
97
+ label("(1, 1) halign/valign end") {
98
+ left 1
99
+ top 1
100
+ hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
101
+ vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
102
+ halign :end
103
+ valign :end
104
+ }
105
+ }
106
+ }
71
107
  }
72
108
  }.show
data/examples/login.rb ADDED
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('Login') {
8
+ margined true
9
+
10
+ vertical_box {
11
+ form {
12
+ @username_entry = entry {
13
+ label 'Username:'
14
+ }
15
+
16
+ @password_entry = password_entry {
17
+ label 'Password:'
18
+ }
19
+ }
20
+
21
+ horizontal_box {
22
+ @login_button = button('Login') {
23
+ on_clicked do
24
+ @username_entry.enabled = false
25
+ @password_entry.enabled = false
26
+ @login_button.enabled = false
27
+ @logout_button.enabled = true
28
+ end
29
+ }
30
+
31
+ @logout_button = button('Logout') {
32
+ enabled false
33
+
34
+ on_clicked do
35
+ @username_entry.text = ''
36
+ @password_entry.text = ''
37
+ @username_entry.enabled = true
38
+ @password_entry.enabled = true
39
+ @login_button.enabled = true
40
+ @logout_button.enabled = false
41
+ end
42
+ }
43
+ }
44
+ }
45
+ }.show
Binary file
@@ -0,0 +1,40 @@
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/area_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ class ControlProxy
27
+ class AreaProxy < ControlProxy
28
+ # Proxy for LibUI scrolling area objects
29
+ #
30
+ # Follows the Proxy Design Pattern
31
+ class ScrollingAreaProxy < AreaProxy
32
+ def build_control
33
+ @area_handler = ::LibUI::FFI::AreaHandler.malloc
34
+ @libui = ::LibUI.new_scrolling_area(@area_handler, *@args)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -36,40 +36,34 @@ module Glimmer
36
36
  attr_accessor :current_area_draw_params
37
37
  end
38
38
 
39
+ LISTENERS = ['on_draw', 'on_mouse_event', 'on_mouse_move', 'on_mouse_down', 'on_mouse_up', 'on_mouse_drag_start', 'on_mouse_drag', 'on_mouse_drop', 'on_mouse_crossed', 'on_mouse_enter', 'on_mouse_exit', 'on_drag_broken', 'on_key_event', 'on_key_down', 'on_key_up']
40
+ LISTENER_ALIASES = {
41
+ on_drawn: 'on_draw',
42
+ on_mouse_moved: 'on_mouse_move',
43
+ on_mouse_drag_started: 'on_mouse_drag_start',
44
+ on_mouse_dragged: 'on_mouse_drag',
45
+ on_mouse_dropped: 'on_mouse_drop',
46
+ on_mouse_cross: 'on_mouse_crossed',
47
+ on_mouse_entered: 'on_mouse_enter',
48
+ on_mouse_exited: 'on_mouse_exit',
49
+ on_drag_break: 'on_drag_broken',
50
+ }
51
+
39
52
  include Glimmer::FiddleConsumer
40
53
  include Parent
41
54
  prepend Transformable
42
55
 
43
56
  attr_reader :area_handler
44
57
 
58
+ def libui_api_keyword
59
+ 'area'
60
+ end
61
+
45
62
  def post_add_content
46
63
  super
47
64
  install_listeners
48
65
  end
49
66
 
50
- def on_draw(&block)
51
- @on_draw_procs ||= []
52
- if block.nil?
53
- @on_draw_procs
54
- else
55
- @on_draw_procs << block
56
- block
57
- end
58
- end
59
-
60
- def can_handle_listener?(listener_name)
61
- listener_name == 'on_draw' || super
62
- end
63
-
64
- def handle_listener(listener_name, &listener)
65
- case listener_name
66
- when 'on_draw'
67
- on_draw(&listener)
68
- else
69
- super
70
- end
71
- end
72
-
73
67
  def draw(area_draw_params)
74
68
  children.dup.each {|child| child.draw(area_draw_params)}
75
69
  on_draw.each {|listener| listener.call(area_draw_params)}
@@ -94,10 +88,42 @@ module Glimmer
94
88
  draw(area_draw_params)
95
89
  AreaProxy.current_area_draw_params = nil
96
90
  end
97
- @area_handler.MouseEvent = fiddle_closure_block_caller(0, [0]) {}
98
- @area_handler.MouseCrossed = fiddle_closure_block_caller(0, [0]) {}
99
- @area_handler.DragBroken = fiddle_closure_block_caller(0, [0]) {}
100
- @area_handler.KeyEvent = fiddle_closure_block_caller(0, [0]) {}
91
+ @area_handler.MouseEvent = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_mouse_event|
92
+ area_mouse_event = ::LibUI::FFI::AreaMouseEvent.new(area_mouse_event)
93
+ area_mouse_event = area_mouse_event_hash(area_mouse_event)
94
+ on_mouse_event.each { |listener| listener.call(area_mouse_event)}
95
+ on_mouse_move.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:x].between?(0, area_mouse_event[:area_width]) && area_mouse_event[:y].between?(0, area_mouse_event[:area_height])
96
+ unless @last_area_mouse_event.nil?
97
+ on_mouse_down.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:down] > 0 && @last_area_mouse_event[:down] == 0
98
+ on_mouse_up.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:up] > 0 && @last_area_mouse_event[:up] == 0
99
+ on_mouse_drag_start.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] > 0 && @last_area_mouse_event[:held] == 0
100
+ on_mouse_drag.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] > 0
101
+ on_mouse_drop.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] == 0 && @last_area_mouse_event[:held] > 0
102
+ end
103
+ @last_area_mouse_event = area_mouse_event
104
+ end
105
+ @area_handler.MouseCrossed = fiddle_closure_block_caller(0, [1, 1, 4]) do |_, _, left|
106
+ left = Glimmer::LibUI.integer_to_boolean(left)
107
+ on_mouse_crossed.each { |listener| listener.call(left) }
108
+ if left
109
+ on_mouse_exit.each { |listener| listener.call(left) }
110
+ else
111
+ on_mouse_enter.each { |listener| listener.call(left) }
112
+ end
113
+ end
114
+ @area_handler.DragBroken = fiddle_closure_block_caller(0, [1, 1]) do |_, _|
115
+ on_drag_broken.each { |listener| listener.call }
116
+ end
117
+ @area_handler.KeyEvent = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_key_event|
118
+ area_key_event = ::LibUI::FFI::AreaKeyEvent.new(area_key_event)
119
+ area_key_event = area_key_event_hash(area_key_event)
120
+ on_key_event.each { |listener| listener.call(area_key_event) }
121
+ if area_key_event[:up]
122
+ on_key_up.each { |listener| listener.call(area_key_event) }
123
+ else
124
+ on_key_down.each { |listener| listener.call(area_key_event) }
125
+ end
126
+ end
101
127
  end
102
128
 
103
129
  def area_draw_params_hash(area_draw_params)
@@ -111,7 +137,65 @@ module Glimmer
111
137
  clip_height: area_draw_params.ClipHeight,
112
138
  }
113
139
  end
140
+
141
+ def area_mouse_event_hash(area_mouse_event)
142
+ {
143
+ x: area_mouse_event.X,
144
+ y: area_mouse_event.Y,
145
+ area_width: area_mouse_event.AreaWidth,
146
+ area_height: area_mouse_event.AreaHeight,
147
+ down: area_mouse_event.Down,
148
+ up: area_mouse_event.Up,
149
+ count: area_mouse_event.Count,
150
+ modifers: modifiers_to_symbols(area_mouse_event.Modifiers),
151
+ held: area_mouse_event.Held1To64,
152
+ }
153
+ end
154
+
155
+ def area_key_event_hash(area_key_event)
156
+ {
157
+ key: key_to_char(area_key_event.Key),
158
+ key_value: area_key_event.Key,
159
+ ext_key: ext_key_to_symbol(area_key_event.ExtKey),
160
+ ext_key_value: area_key_event.ExtKey,
161
+ modifier: modifiers_to_symbols(area_key_event.Modifier).first,
162
+ modifiers: modifiers_to_symbols(area_key_event.Modifiers),
163
+ up: Glimmer::LibUI.integer_to_boolean(area_key_event.Up),
164
+ }
165
+ end
166
+
167
+ def key_to_char(key)
168
+ key.chr if key > 0
169
+ end
170
+
171
+ def ext_key_to_symbol(ext_key_value)
172
+ Glimmer::LibUI.enum_symbols(:ext_key)[ext_key_value - 1].to_s.to_sym if ext_key_value > 0
173
+ end
174
+
175
+ def modifiers_to_symbols(modifiers_value)
176
+ symbols = []
177
+ modifiers_value = extract_symbol_from_modifiers_value(modifiers_value, symbols: symbols) while modifiers_value > 0
178
+ symbols
179
+ end
180
+
181
+ def extract_symbol_from_modifiers_value(modifiers_value, symbols: )
182
+ if modifiers_value >= 8
183
+ symbols << :command
184
+ modifiers_value -= 8
185
+ elsif modifiers_value >= 4
186
+ symbols << :shift
187
+ modifiers_value -= 4
188
+ elsif modifiers_value >= 2
189
+ symbols << :alt
190
+ modifiers_value -= 2
191
+ elsif modifiers_value >= 1
192
+ symbols << :control
193
+ modifiers_value -= 1
194
+ end
195
+ end
114
196
  end
115
197
  end
116
198
  end
117
199
  end
200
+
201
+ Dir[File.expand_path("./#{File.basename(__FILE__, '.rb')}/*.rb", __dir__)].each {|f| require f}
@@ -0,0 +1,36 @@
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/entry_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ class ControlProxy
27
+ class EntryProxy < ControlProxy
28
+ # Proxy for LibUI password entry objects
29
+ #
30
+ # Follows the Proxy Design Pattern
31
+ class PasswordEntryProxy < EntryProxy
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
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/entry_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ class ControlProxy
27
+ class EntryProxy < ControlProxy
28
+ # Proxy for LibUI search entry objects
29
+ #
30
+ # Follows the Proxy Design Pattern
31
+ class SearchEntryProxy < EntryProxy
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
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
+ class ControlProxy
27
+ # Proxy for LibUI entry objects
28
+ #
29
+ # Follows the Proxy Design Pattern
30
+ class EntryProxy < ControlProxy
31
+ def libui_api_keyword
32
+ 'entry'
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ Dir[File.expand_path("./#{File.basename(__FILE__, '.rb')}/*.rb", __dir__)].each {|f| require f}