glimmer-dsl-libui 0.0.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 +7 -0
- data/CHANGELOG.md +10 -0
- data/LICENSE.txt +20 -0
- data/README.md +303 -0
- data/VERSION +1 -0
- data/bin/girb +30 -0
- data/bin/girb_runner.rb +47 -0
- data/examples/basic_button.rb +17 -0
- data/examples/basic_window.rb +11 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/control_expression.rb +50 -0
- data/lib/glimmer/dsl/libui/dsl.rb +50 -0
- data/lib/glimmer/dsl/libui/listener_expression.rb +41 -0
- data/lib/glimmer/dsl/libui/property_expression.rb +41 -0
- data/lib/glimmer/libui/control_proxy.rb +121 -0
- data/lib/glimmer/libui/window_proxy.rb +68 -0
- data/lib/glimmer-dsl-libui.rb +40 -0
- metadata +197 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 68aa91e5f6012112c0ad1ad21492b650e63335ea60f3e2b0a9b7040e94b92030
|
4
|
+
data.tar.gz: ac76c9b9683c69422139b6957f0d966b7a870236408f096c89059b32ee1fa8b9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 58115e4fba45bffea3cc5645285742e6a5d4d7b8a0e4515365cd722001b5c386e16ff126f9c3800caedfc95508402633af8be0c1644303eb5cae7499bdbc0bac
|
7
|
+
data.tar.gz: b656e89bf37d3e2743dfb5752cdb5e1f482f128b1c078346f8a70f1fdbf97ad38a708956f694a2171c83f3c83a20fe673b50508925a5f5da0540032d9bb5076b
|
data/CHANGELOG.md
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,303 @@
|
|
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.0.1
|
2
|
+
## Dependency-Free Ruby Desktop Development GUI Library
|
3
|
+
[](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
|
+
[](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
|
5
|
+
[](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
6
|
+
|
7
|
+
[Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) is a dependency-free Ruby desktop development GUI library. No need to pre-install any pre-requisites. Just install the gem and have platform-independent GUI that just works!
|
8
|
+
|
9
|
+
[Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui) aims to provide a DSL similar to the [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) to enable more productive desktop development in Ruby with:
|
10
|
+
- Declarative DSL syntax that visually maps to the GUI widget hierarchy
|
11
|
+
- Convention over configuration via smart defaults and automation of low-level details
|
12
|
+
- Requiring the least amount of syntax possible to build GUI
|
13
|
+
- Bidirectional Data-Binding to declaratively wire and automatically synchronize GUI with Business Models
|
14
|
+
- Custom Widget support
|
15
|
+
- Scaffolding for new custom widgets, apps, and gems
|
16
|
+
- Native-Executable packaging on Mac, Windows, and Linux
|
17
|
+
|
18
|
+
## Glimmer GUI DSL Concepts
|
19
|
+
|
20
|
+
The Glimmer GUI DSL provides a declarative syntax for [LibUI](https://github.com/kojix2/LibUI) that:
|
21
|
+
- Supports smart defaults (e.g. automatic `on_closing` listener that quits `window`)
|
22
|
+
- Automates wiring of widgets (e.g. `button` is automatically set as child of `window`)
|
23
|
+
- Hides lower-level details (e.g. `LibUI.main` loop is started automatically when triggering `show` on `window`)
|
24
|
+
- Nests widgets according to their visual hierarchy
|
25
|
+
- Requires the minimum amount of syntax needed to describe an app's GUI
|
26
|
+
|
27
|
+
The Glimmer GUI DSL follows these simple concepts in mapping from [LibUI](https://github.com/kojix2/LibUI) syntax:
|
28
|
+
- **Control**: [LibUI](https://github.com/kojix2/LibUI) controls may be declared by lower-case underscored name (aka keyword) (e.g. `window` or `button`). Behind the scenes, they are represented by keyword methods that map to corresponding `LibUI.new_keyword` methods receiving args (e.g. `window('hello world', 300, 200, 1)`).
|
29
|
+
- **Content/Properties/Listeners Block**: Any keyword may be optionally followed by a Ruby curly-brace multi-line-block containing nested controls (content) and/or properties (attributes) (e.g. `window('hello world', 300, 200, 1) {button('greet')}`). It optionally recives one arg representing the control (e.g. `button('greet') {|b| on_clicked { puts b.text}}`)
|
30
|
+
- **Property**: Control properties may be declared inside keyword blocks with lower-case underscored name followed by property value args (e.g. `title "hello world"` inside `group`). Behind the scenes, they properties correspond to `control_set_property` methods.
|
31
|
+
- **Listener**: Control listeners may be declared inside keyword blocks with listener lower-case underscored name beginning with `on_` and receiving required block handler (e.g. `on_clicked {puts 'clicked'}` inside `button`). Behind the scenes, they listeners correspond to `control_on_event` methods.
|
32
|
+
|
33
|
+
Example of an app written in [LibUI](https://github.com/kojix2/LibUI)'s procedural imperative syntax:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
require 'libui'
|
37
|
+
|
38
|
+
UI = LibUI
|
39
|
+
|
40
|
+
UI.init
|
41
|
+
|
42
|
+
main_window = UI.new_window('hello world', 300, 200, 1)
|
43
|
+
|
44
|
+
UI.control_show(main_window)
|
45
|
+
|
46
|
+
UI.window_on_closing(main_window) do
|
47
|
+
puts 'Bye Bye'
|
48
|
+
UI.control_destroy(main_window)
|
49
|
+
UI.quit
|
50
|
+
0
|
51
|
+
end
|
52
|
+
|
53
|
+
UI.main
|
54
|
+
UI.quit
|
55
|
+
```
|
56
|
+
|
57
|
+
Example of the same app written in [Glimmer](https://github.com/AndyObtiva/glimmer) object-oriented declarative hierarchical syntax:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require 'glimmer-dsl-libui'
|
61
|
+
|
62
|
+
include Glimmer
|
63
|
+
|
64
|
+
window('hello world', 300, 200, 1) {
|
65
|
+
on_closing do
|
66
|
+
puts 'Bye Bye'
|
67
|
+
end
|
68
|
+
}.show
|
69
|
+
```
|
70
|
+
|
71
|
+
## Usage
|
72
|
+
|
73
|
+
Add `require 'glimmer-dsl-libui'` at the top, and then `include Glimmer` into the top-level main object for testing or into an actual class for serious usage.
|
74
|
+
|
75
|
+
Example (you may copy/paste in [`girb`](#girb-glimmer-irb)):
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
require 'glimmer-dsl-libui'
|
79
|
+
|
80
|
+
class Application
|
81
|
+
include Glimmer
|
82
|
+
|
83
|
+
def launch
|
84
|
+
window('hello world', 300, 200, 1) {
|
85
|
+
button('Button') {
|
86
|
+
on_clicked do
|
87
|
+
puts 'Button Clicked'
|
88
|
+
end
|
89
|
+
}
|
90
|
+
|
91
|
+
on_closing do
|
92
|
+
puts 'Bye Bye'
|
93
|
+
end
|
94
|
+
}.show
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Application.new.launch
|
99
|
+
```
|
100
|
+
|
101
|
+
## API
|
102
|
+
|
103
|
+
Any control returned by a Glimmer GUI DSL keyword declaration can be introspected for its properties and updated via object-oriented attributes (standard Ruby `attr`/`attr=` or `set_attr`).
|
104
|
+
|
105
|
+
Example (you may copy/paste in [`girb`](#girb-glimmer-irb)):
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
w = window('hello world', 300, 200, 1)
|
109
|
+
puts w.title # => hello world
|
110
|
+
w.title = 'howdy'
|
111
|
+
puts w.title # => howdy
|
112
|
+
w.set_title 'aloha'
|
113
|
+
puts w.title # => aloha
|
114
|
+
```
|
115
|
+
|
116
|
+
## Girb (Glimmer IRB)
|
117
|
+
|
118
|
+
You can run the `girb` command (`bin/girb` if you cloned the project locally):
|
119
|
+
|
120
|
+
```
|
121
|
+
girb
|
122
|
+
```
|
123
|
+
|
124
|
+
This gives you `irb` with the `glimmer-dsl-libui` gem loaded and the `Glimmer` module mixed into the main object for easy experimentation with GUI.
|
125
|
+
|
126
|
+
Gotcha: On the Mac, when you close a window opened in `girb`, it remains open until you enter `exit` or open another GUI window.
|
127
|
+
|
128
|
+
## Examples
|
129
|
+
|
130
|
+
These examples reimplement the ones in the [LibUI](https://github.com/kojix2/LibUI) project utilizing the shorter Glimmer GUI DSL syntax.
|
131
|
+
|
132
|
+
### Basic Window
|
133
|
+
|
134
|
+
[examples/basic_window.rb](examples/basic_window.rb)
|
135
|
+
|
136
|
+
Mac
|
137
|
+
|
138
|
+

|
139
|
+
|
140
|
+
Linux
|
141
|
+
|
142
|
+

|
143
|
+
|
144
|
+
[LibUI](https://github.com/kojix2/LibUI) Original Version:
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
require 'libui'
|
148
|
+
|
149
|
+
UI = LibUI
|
150
|
+
|
151
|
+
UI.init
|
152
|
+
|
153
|
+
main_window = UI.new_window('hello world', 300, 200, 1)
|
154
|
+
|
155
|
+
UI.control_show(main_window)
|
156
|
+
|
157
|
+
UI.window_on_closing(main_window) do
|
158
|
+
puts 'Bye Bye'
|
159
|
+
UI.control_destroy(main_window)
|
160
|
+
UI.quit
|
161
|
+
0
|
162
|
+
end
|
163
|
+
|
164
|
+
UI.main
|
165
|
+
UI.quit
|
166
|
+
```
|
167
|
+
|
168
|
+
[Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
|
169
|
+
|
170
|
+
```ruby
|
171
|
+
require 'glimmer-dsl-libui'
|
172
|
+
|
173
|
+
include Glimmer
|
174
|
+
|
175
|
+
window('hello world', 300, 200, 1) {
|
176
|
+
on_closing do
|
177
|
+
puts 'Bye Bye'
|
178
|
+
end
|
179
|
+
}.show
|
180
|
+
```
|
181
|
+
|
182
|
+
### Basic Button
|
183
|
+
|
184
|
+
[examples/basic_button.rb](examples/basic_button.rb)
|
185
|
+
|
186
|
+
Mac
|
187
|
+
|
188
|
+

|
189
|
+

|
190
|
+
|
191
|
+
Linux
|
192
|
+
|
193
|
+

|
194
|
+

|
195
|
+
|
196
|
+
[LibUI](https://github.com/kojix2/LibUI) Original Version:
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
require 'libui'
|
200
|
+
|
201
|
+
UI = LibUI
|
202
|
+
|
203
|
+
UI.init
|
204
|
+
|
205
|
+
main_window = UI.new_window('hello world', 300, 200, 1)
|
206
|
+
|
207
|
+
button = UI.new_button('Button')
|
208
|
+
|
209
|
+
UI.button_on_clicked(button) do
|
210
|
+
UI.msg_box(main_window, 'Information', 'You clicked the button')
|
211
|
+
end
|
212
|
+
|
213
|
+
UI.window_on_closing(main_window) do
|
214
|
+
puts 'Bye Bye'
|
215
|
+
UI.control_destroy(main_window)
|
216
|
+
UI.quit
|
217
|
+
0
|
218
|
+
end
|
219
|
+
|
220
|
+
UI.window_set_child(main_window, button)
|
221
|
+
UI.control_show(main_window)
|
222
|
+
|
223
|
+
UI.main
|
224
|
+
UI.quit
|
225
|
+
```
|
226
|
+
|
227
|
+
[Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
require 'glimmer-dsl-libui'
|
231
|
+
|
232
|
+
include Glimmer
|
233
|
+
|
234
|
+
window('hello world', 300, 200, 1) { |w|
|
235
|
+
button('Button') {
|
236
|
+
on_clicked do
|
237
|
+
msg_box(w, 'Information', 'You clicked the button')
|
238
|
+
end
|
239
|
+
}
|
240
|
+
|
241
|
+
on_closing do
|
242
|
+
puts 'Bye Bye'
|
243
|
+
end
|
244
|
+
}.show
|
245
|
+
```
|
246
|
+
|
247
|
+
## Contributing to glimmer-dsl-libui
|
248
|
+
|
249
|
+
- Check out the latest master to make sure the feature hasn't been
|
250
|
+
implemented or the bug hasn't been fixed yet.
|
251
|
+
- Check out the issue tracker to make sure someone already hasn't
|
252
|
+
requested it and/or contributed it.
|
253
|
+
- Fork the project.
|
254
|
+
- Start a feature/bugfix branch.
|
255
|
+
- Commit and push until you are happy with your contribution.
|
256
|
+
- Make sure to add tests for it. This is important so I don't break it
|
257
|
+
in a future version unintentionally.
|
258
|
+
- Please try not to mess with the Rakefile, version, or history. If
|
259
|
+
you want to have your own version, or is otherwise necessary, that
|
260
|
+
is fine, but please isolate to its own commit so I can cherry-pick
|
261
|
+
around it.
|
262
|
+
|
263
|
+
## Help
|
264
|
+
|
265
|
+
### Issues
|
266
|
+
|
267
|
+
You may submit [issues](https://github.com/AndyObtiva/glimmer/issues) on [GitHub](https://github.com/AndyObtiva/glimmer/issues).
|
268
|
+
|
269
|
+
[Click here to submit an issue.](https://github.com/AndyObtiva/glimmer/issues)
|
270
|
+
|
271
|
+
### Chat
|
272
|
+
|
273
|
+
If you need live help, try to [](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
274
|
+
|
275
|
+
## Process
|
276
|
+
|
277
|
+
[Glimmer Process](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md)
|
278
|
+
|
279
|
+
## Planned Features and Feature Suggestions
|
280
|
+
|
281
|
+
These features have been planned or suggested. You might see them in a future version of [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui). You are welcome to contribute more feature suggestions.
|
282
|
+
|
283
|
+
[TODO.md](TODO.md)
|
284
|
+
|
285
|
+
## Change Log
|
286
|
+
|
287
|
+
[CHANGELOG.md](CHANGELOG.md)
|
288
|
+
|
289
|
+
## Contributors
|
290
|
+
|
291
|
+
* [Andy Maleh](https://github.com/AndyObtiva) (Founder)
|
292
|
+
|
293
|
+
[Click here to view contributor commits.](https://github.com/AndyObtiva/glimmer-dsl-libui/graphs/contributors)
|
294
|
+
|
295
|
+
## License
|
296
|
+
|
297
|
+
[MIT](LICENSE.txt)
|
298
|
+
|
299
|
+
Copyright (c) 2021 Andy Maleh
|
300
|
+
|
301
|
+
--
|
302
|
+
|
303
|
+
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 />](https://github.com/AndyObtiva/glimmer) Built for [Glimmer](https://github.com/AndyObtiva/glimmer) (DSL Framework).
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/bin/girb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright (c) 2020-2021 Andy Maleh
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
# This script was written for Windows and Linux only
|
25
|
+
|
26
|
+
require_relative 'girb_runner'
|
27
|
+
|
28
|
+
require 'irb'
|
29
|
+
|
30
|
+
IRB.start('.')
|
data/bin/girb_runner.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Copyright (c) 2020-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 'puts_debuggerer'
|
23
|
+
require 'fileutils'
|
24
|
+
require 'etc'
|
25
|
+
|
26
|
+
require_relative '../lib/glimmer-dsl-libui'
|
27
|
+
|
28
|
+
include Glimmer
|
29
|
+
|
30
|
+
GIRB_RUNNER_EXIT_FILE = "#{Etc.getpwuid.dir}/.girb_runner_exit"
|
31
|
+
FileUtils.rm_rf GIRB_RUNNER_EXIT_FILE
|
32
|
+
|
33
|
+
@exit_method = method(:exit)
|
34
|
+
|
35
|
+
@exit_girb_block = lambda do
|
36
|
+
FileUtils.touch GIRB_RUNNER_EXIT_FILE
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.exit(*args)
|
40
|
+
@exit_girb_block.call
|
41
|
+
@exit_method.call(*args)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.quit(*args)
|
45
|
+
@exit_girb_block.call
|
46
|
+
@exit_method.call(*args)
|
47
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
|
5
|
+
include Glimmer
|
6
|
+
|
7
|
+
window('hello world', 300, 200, 1) { |w|
|
8
|
+
button('Button') {
|
9
|
+
on_clicked do
|
10
|
+
msg_box(w, 'Information', 'You clicked the button')
|
11
|
+
end
|
12
|
+
}
|
13
|
+
|
14
|
+
on_closing do
|
15
|
+
puts 'Bye Bye'
|
16
|
+
end
|
17
|
+
}.show
|
Binary file
|
@@ -0,0 +1,50 @@
|
|
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/dsl/expression'
|
23
|
+
require 'glimmer/dsl/parent_expression'
|
24
|
+
|
25
|
+
module Glimmer
|
26
|
+
module DSL
|
27
|
+
module Libui
|
28
|
+
class ControlExpression < Expression
|
29
|
+
include ParentExpression
|
30
|
+
|
31
|
+
def can_interpret?(parent, keyword, *args, &block)
|
32
|
+
Glimmer::LibUI::ControlProxy.control_exists?(keyword)
|
33
|
+
end
|
34
|
+
|
35
|
+
def interpret(parent, keyword, *args, &block)
|
36
|
+
Glimmer::LibUI::ControlProxy.create(keyword, parent, args, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_content(parent, keyword, *args, &block)
|
40
|
+
super
|
41
|
+
parent.post_add_content
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
require 'glimmer/libui/control_proxy'
|
50
|
+
require 'glimmer/libui/window_proxy'
|
@@ -0,0 +1,50 @@
|
|
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/dsl/engine'
|
23
|
+
Dir[File.expand_path('../*_expression.rb', __FILE__)].each {|f| require f}
|
24
|
+
|
25
|
+
# Glimmer DSL expression configuration module
|
26
|
+
#
|
27
|
+
# When DSL engine interprets an expression, it attempts to handle
|
28
|
+
# with expressions listed here in the order specified.
|
29
|
+
|
30
|
+
# Every expression has a corresponding Expression subclass
|
31
|
+
# in glimmer/dsl
|
32
|
+
|
33
|
+
module Glimmer
|
34
|
+
module DSL
|
35
|
+
module Libui
|
36
|
+
Engine.add_dynamic_expressions(
|
37
|
+
Libui,
|
38
|
+
# list_selection_data_binding
|
39
|
+
# data_binding
|
40
|
+
# block_attribute
|
41
|
+
# attribute
|
42
|
+
%w[
|
43
|
+
listener
|
44
|
+
property
|
45
|
+
control
|
46
|
+
]
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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/dsl/expression'
|
23
|
+
require 'glimmer/libui/control_proxy'
|
24
|
+
|
25
|
+
module Glimmer
|
26
|
+
module DSL
|
27
|
+
module Libui
|
28
|
+
class ListenerExpression < Expression
|
29
|
+
def can_interpret?(parent, keyword, *args, &block)
|
30
|
+
parent.is_a?(Glimmer::LibUI::ControlProxy) and
|
31
|
+
block_given? and
|
32
|
+
parent.can_handle_listener?(keyword)
|
33
|
+
end
|
34
|
+
|
35
|
+
def interpret(parent, keyword, *args, &block)
|
36
|
+
parent.handle_listener(keyword, &block)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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/dsl/expression'
|
23
|
+
require 'glimmer/libui/control_proxy'
|
24
|
+
|
25
|
+
module Glimmer
|
26
|
+
module DSL
|
27
|
+
module Libui
|
28
|
+
class PropertyExpression < Expression
|
29
|
+
def can_interpret?(parent, keyword, *args, &block)
|
30
|
+
parent.is_a?(Glimmer::LibUI::ControlProxy) and
|
31
|
+
block.nil? and
|
32
|
+
parent.respond_to?(keyword, *args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def interpret(parent, keyword, *args, &block)
|
36
|
+
parent.send(keyword, *args)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,121 @@
|
|
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
|
+
module Glimmer
|
23
|
+
module LibUI
|
24
|
+
# Proxy for LibUI Control objects
|
25
|
+
#
|
26
|
+
# Follows the Proxy Design Pattern
|
27
|
+
class ControlProxy
|
28
|
+
class << self
|
29
|
+
def control_exists?(keyword)
|
30
|
+
::LibUI.respond_to?("new_#{keyword}") || ::LibUI.respond_to?(keyword)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create(keyword, parent, args)
|
34
|
+
widget_proxy_class(keyword).new(keyword, parent, args)
|
35
|
+
end
|
36
|
+
|
37
|
+
def widget_proxy_class(keyword)
|
38
|
+
begin
|
39
|
+
class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
|
40
|
+
Glimmer::LibUI.const_get(class_name)
|
41
|
+
rescue
|
42
|
+
Glimmer::LibUI::ControlProxy
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# libui returns the contained LibUI object
|
48
|
+
attr_reader :parent_proxy, :libui, :args, :keyword
|
49
|
+
|
50
|
+
def initialize(keyword, parent, args, &block)
|
51
|
+
@keyword = keyword
|
52
|
+
@parent_proxy = parent
|
53
|
+
@args = args
|
54
|
+
build_control
|
55
|
+
if @parent_proxy.is_a?(WindowProxy)
|
56
|
+
::LibUI.window_set_child(@parent_proxy.libui, @libui)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def post_add_content
|
61
|
+
# No Op by default
|
62
|
+
end
|
63
|
+
|
64
|
+
def can_handle_listener?(listener_name)
|
65
|
+
::LibUI.respond_to?("control_#{listener_name}") || ::LibUI.respond_to?("#{@keyword}_#{listener_name}")
|
66
|
+
end
|
67
|
+
|
68
|
+
def handle_listener(listener_name, &listener)
|
69
|
+
if ::LibUI.respond_to?("control_#{listener_name}")
|
70
|
+
::LibUI.send("control_#{listener_name}", @libui, &listener)
|
71
|
+
elsif ::LibUI.respond_to?("#{@keyword}_#{listener_name}")
|
72
|
+
::LibUI.send("#{@keyword}_#{listener_name}", @libui, &listener)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def respond_to?(method_name, *args, &block)
|
77
|
+
respond_to_libui?(method_name, *args, &block) || super
|
78
|
+
end
|
79
|
+
|
80
|
+
def respond_to_libui?(method_name, *args, &block)
|
81
|
+
::LibUI.respond_to?("control_#{method_name}") ||
|
82
|
+
::LibUI.respond_to?("#{@keyword}_#{method_name}") ||
|
83
|
+
::LibUI.respond_to?("#{@keyword}_set_#{method_name}") ||
|
84
|
+
::LibUI.respond_to?("#{@keyword}_set_#{method_name.to_s.sub(/=$/, '')}")
|
85
|
+
end
|
86
|
+
|
87
|
+
def method_missing(method_name, *args, &block)
|
88
|
+
if respond_to_libui?(method_name, *args, &block)
|
89
|
+
send_to_libui(method_name, *args, &block)
|
90
|
+
else
|
91
|
+
super
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def send_to_libui(method_name, *args, &block)
|
96
|
+
if ::LibUI.respond_to?("control_#{method_name}")
|
97
|
+
::LibUI.send("control_#{method_name}", @libui, *args)
|
98
|
+
elsif ::LibUI.respond_to?("#{@keyword}_#{method_name}") && args.empty?
|
99
|
+
::LibUI.send("#{@keyword}_#{method_name}", @libui, *args)
|
100
|
+
elsif ::LibUI.respond_to?("#{@keyword}_set_#{method_name}") && !args.empty?
|
101
|
+
::LibUI.send("#{@keyword}_set_#{method_name}", @libui, *args)
|
102
|
+
elsif ::LibUI.respond_to?("#{@keyword}_set_#{method_name.to_s.sub(/=$/, '')}") && !args.empty?
|
103
|
+
::LibUI.send("#{@keyword}_set_#{method_name.to_s.sub(/=$/, '')}", @libui, *args)
|
104
|
+
elsif ::LibUI.respond_to?("#{@keyword}_#{method_name}") && method_name.start_with?('set_') && !args.empty?
|
105
|
+
::LibUI.send("#{@keyword}_#{method_name}", @libui, *args)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def build_control
|
112
|
+
@libui ||= if ::LibUI.respond_to?("new_#{keyword}")
|
113
|
+
::LibUI.send("new_#{@keyword}", *@args)
|
114
|
+
elsif ::LibUI.respond_to?(keyword)
|
115
|
+
@args[0] = @args.first.libui if @args.first.is_a?(ControlProxy)
|
116
|
+
::LibUI.send(@keyword, *@args)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,68 @@
|
|
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 Window objects
|
27
|
+
#
|
28
|
+
# Follows the Proxy Design Pattern
|
29
|
+
class WindowProxy < ControlProxy
|
30
|
+
def show
|
31
|
+
send_to_libui('show')
|
32
|
+
unless @shown_at_least_once
|
33
|
+
@shown_at_least_once = true
|
34
|
+
::LibUI.main
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def handle_listener(listener_name, &listener)
|
39
|
+
if listener_name == 'on_closing'
|
40
|
+
default_behavior_listener = Proc.new do
|
41
|
+
return_value = listener.call
|
42
|
+
if return_value.is_a?(Numeric)
|
43
|
+
return_value
|
44
|
+
else
|
45
|
+
destroy
|
46
|
+
::LibUI.quit
|
47
|
+
0
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
super(listener_name, &default_behavior_listener)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def build_control
|
57
|
+
::LibUI.init
|
58
|
+
super.tap do
|
59
|
+
handle_listener('on_closing') do
|
60
|
+
destroy
|
61
|
+
::LibUI.quit
|
62
|
+
0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -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
|
+
$LOAD_PATH.unshift(File.expand_path('..', __FILE__))
|
23
|
+
|
24
|
+
# External requires
|
25
|
+
require 'glimmer'
|
26
|
+
# require 'logging'
|
27
|
+
# require 'puts_debuggerer' if ENV['pd'].to_s.downcase == 'true'
|
28
|
+
# require 'super_module'
|
29
|
+
require 'libui'
|
30
|
+
|
31
|
+
# Internal requires
|
32
|
+
# require 'ext/glimmer/config'
|
33
|
+
# require 'ext/glimmer'
|
34
|
+
require 'glimmer/dsl/libui/dsl'
|
35
|
+
Glimmer::Config.loop_max_count = -1
|
36
|
+
Glimmer::Config.excluded_keyword_checkers << lambda do |method_symbol, *args|
|
37
|
+
method = method_symbol.to_s
|
38
|
+
result = false
|
39
|
+
result ||= method == 'load_iseq'
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: glimmer-dsl-libui
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andy Maleh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: glimmer
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.1.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: libui
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.9
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.9
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: juwelier
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.4.9
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 3.0.0
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 2.4.9
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 3.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rake-tui
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.2.1
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.2.1
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: puts_debuggerer
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.13.1
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.13.1
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: coveralls
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.8.23
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.8.23
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: simplecov
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.16.1
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 0.16.1
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: simplecov-lcov
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 0.7.0
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 0.7.0
|
145
|
+
description: Dependency-Free Ruby Desktop Development GUI Library (no need to pre-install
|
146
|
+
any pre-requisites. Just install the gem and have platform-independent GUI that
|
147
|
+
just works)
|
148
|
+
email: andy.am@gmail.com
|
149
|
+
executables:
|
150
|
+
- girb
|
151
|
+
extensions: []
|
152
|
+
extra_rdoc_files:
|
153
|
+
- CHANGELOG.md
|
154
|
+
- LICENSE.txt
|
155
|
+
- README.md
|
156
|
+
files:
|
157
|
+
- CHANGELOG.md
|
158
|
+
- LICENSE.txt
|
159
|
+
- README.md
|
160
|
+
- VERSION
|
161
|
+
- bin/girb
|
162
|
+
- bin/girb_runner.rb
|
163
|
+
- examples/basic_button.rb
|
164
|
+
- examples/basic_window.rb
|
165
|
+
- glimmer-dsl-libui.gemspec
|
166
|
+
- lib/glimmer-dsl-libui.rb
|
167
|
+
- lib/glimmer/dsl/libui/control_expression.rb
|
168
|
+
- lib/glimmer/dsl/libui/dsl.rb
|
169
|
+
- lib/glimmer/dsl/libui/listener_expression.rb
|
170
|
+
- lib/glimmer/dsl/libui/property_expression.rb
|
171
|
+
- lib/glimmer/libui/control_proxy.rb
|
172
|
+
- lib/glimmer/libui/window_proxy.rb
|
173
|
+
homepage: http://github.com/AndyObtiva/glimmer-dsl-libui
|
174
|
+
licenses:
|
175
|
+
- MIT
|
176
|
+
metadata: {}
|
177
|
+
post_install_message:
|
178
|
+
rdoc_options: []
|
179
|
+
require_paths:
|
180
|
+
- lib
|
181
|
+
- "."
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubygems_version: 3.2.22
|
194
|
+
signing_key:
|
195
|
+
specification_version: 4
|
196
|
+
summary: Glimmer DSL for LibUI
|
197
|
+
test_files: []
|