glimmer-dsl-tk 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +138 -9
- data/VERSION +1 -1
- data/lib/glimmer-dsl-tk.rb +1 -1
- data/lib/glimmer/dsl/tk/widget_expression.rb +3 -1
- data/lib/glimmer/tk/frame_proxy.rb +42 -0
- data/lib/glimmer/tk/notebook_proxy.rb +45 -0
- data/lib/glimmer/tk/widget_proxy.rb +29 -8
- data/samples/hello/hello_tab.rb +27 -0
- data/samples/hello/hello_world.rb +2 -0
- metadata +43 -148
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f1d6377c707655c2ae9b49e60f3412e31ef27869aefee78492c30feeba21ef5
|
4
|
+
data.tar.gz: 02bef3e445ba3e3fce1633d89af37c66860dadbe2ae5aa4472c6dbcbbcd3602c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30f1946ae7324c585309f0986f5a320a427250ca2e6925999856a2bd07958ab420b8ba67e6227d1991f7ab68e43627337fc6644f4b97d81899a7dafaccc8db61
|
7
|
+
data.tar.gz: cba5744288234fe059aa9c5efe68d9c0404d81211d63096b07a45f89474fcaaa4c57b7faccb018003394c8a50a9750c5bfc4d26f17a5ee16b74f40f5dac60170
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
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 Tk 0.0.
|
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 Tk 0.0.2 (Desktop GUI)
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-tk.svg)](http://badge.fury.io/rb/glimmer-dsl-tk)
|
3
3
|
[![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
4
|
|
5
5
|
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [Tk](https://www.tcl.tk/) enables desktop development with [Glimmer](https://github.com/AndyObtiva/glimmer).
|
6
6
|
|
7
|
-
[Tcl/Tk](https://www.tcl.tk/) has evolved into a practical desktop GUI toolkit due to gaining true native widgets on Mac, Windows, and Linux in Tk version 8.5.
|
7
|
+
[Tcl/Tk](https://www.tcl.tk/) has evolved into a practical desktop GUI toolkit due to gaining true native widgets on Mac, Windows, and Linux in [Tk version 8.5](https://www.tcl.tk/software/tcltk/8.5.html#:~:text=Highlights%20of%20Tk%208.5&text=Font%20rendering%3A%20Now%20uses%20anti,and%20window%20layout%2C%20and%20more.).
|
8
8
|
|
9
9
|
Additionally, Ruby 3.0 supports truly parallel multi-threading, making both [MRI](https://github.com/ruby/ruby) and [Tk](https://www.tcl.tk/) finally viable for support in [Glimmer](https://github.com/AndyObtiva/glimmer) (Ruby Desktop Development GUI Library).
|
10
10
|
|
@@ -15,6 +15,28 @@ Additionally, Ruby 3.0 supports truly parallel multi-threading, making both [MRI
|
|
15
15
|
- Scaffolding for new custom widgets, apps, and gems
|
16
16
|
- Native-Executable packaging on Mac, Windows, and Linux
|
17
17
|
|
18
|
+
**Hello, World!**
|
19
|
+
|
20
|
+
Glimmer code (from [samples/hello/hello_world.rb](samples/hello/hello_world.rb)):
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
root {
|
24
|
+
label {
|
25
|
+
text 'Hello, World!'
|
26
|
+
}
|
27
|
+
}.open
|
28
|
+
```
|
29
|
+
|
30
|
+
Run (with the [glimmer-dsl-tk](https://rubygems.org/gems/glimmer-dsl-tk) gem installed):
|
31
|
+
|
32
|
+
```
|
33
|
+
ruby -e "require '../samples/hello/hello_world.rb'"
|
34
|
+
```
|
35
|
+
|
36
|
+
Glimmer app:
|
37
|
+
|
38
|
+
![glimmer dsl tk screenshot sample hello world](images/glimmer-dsl-tk-screenshot-sample-hello-world.png)
|
39
|
+
|
18
40
|
Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
|
19
41
|
- [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt): Glimmer DSL for SWT (Desktop GUI via JRuby on SWT)
|
20
42
|
- [glimmer-dsl-opal](https://github.com/AndyObtiva/glimmer-dsl-opal): Glimmer DSL for Opal (Web GUI Adapter for Desktop Apps)
|
@@ -46,7 +68,7 @@ gem install glimmer-dsl-tk
|
|
46
68
|
|
47
69
|
Add the following to `Gemfile`:
|
48
70
|
```
|
49
|
-
gem 'glimmer-dsl-tk', '~> 0.0.
|
71
|
+
gem 'glimmer-dsl-tk', '~> 0.0.2'
|
50
72
|
```
|
51
73
|
|
52
74
|
And, then run:
|
@@ -54,9 +76,77 @@ And, then run:
|
|
54
76
|
bundle
|
55
77
|
```
|
56
78
|
|
57
|
-
##
|
79
|
+
## Tk Concepts
|
80
|
+
|
81
|
+
Here is a summary taken from the official [Tk Concepts Tutorial](https://tkdocs.com/tutorial/concepts.html)
|
82
|
+
|
83
|
+
Tk Concepts consist of:
|
84
|
+
- [Widgets](https://tkdocs.com/tutorial/concepts.html#widgets): Widgets are all the things that you see onscreen. In our example, we had a button, an entry, a few labels, and a frame. Others are things like checkboxes, tree views, scrollbars, text areas, and so on. Widgets are what are often referred to as "controls"; you'll also often see them referred to as "windows," particularly in Tk's documentation, a holdover from its X11 roots (so under that terminology, both a toplevel window and things like a button would be called windows).
|
85
|
+
- [Geometry Management](https://tkdocs.com/tutorial/concepts.html#geometry): If you've been playing around creating widgets, you've probably noticed that just by creating them, they didn't end up showing up onscreen. Having things actually put in the onscreen window, and precisely where in the window they show up is a separate step called geometry management.
|
86
|
+
- [Event Handling](https://tkdocs.com/tutorial/concepts.html#events): In Tk, as in most other user interface toolkits, there is an event loop which receives events from the operating system. These are things like button presses, keystrokes, mouse movement, window resizing, and so on.
|
87
|
+
|
88
|
+
Learn more at the official [Tk Concepts Tutorial](https://tkdocs.com/tutorial/concepts.html)
|
89
|
+
|
90
|
+
## Glimmer GUI DSL Concepts
|
91
|
+
|
92
|
+
The Glimmer GUI DSL provides a declarative syntax for [Tk](https://www.tcl.tk/) that:
|
93
|
+
- Supports smart defaults (e.g. grid layout on most widgets)
|
94
|
+
- Automates wiring of widgets (e.g. nesting a label under a toplevel root or adding a frame to a notebook)
|
95
|
+
- Hides lower-level details (e.g. main loop is started automatically when opening a window)
|
96
|
+
- Nests widgets according to their visual hierarchy
|
97
|
+
- Requires the minimum amount of syntax needed to describe an app's GUI
|
98
|
+
|
99
|
+
The Glimmer GUI DSL follows these simple concepts in mapping from Tk syntax:
|
100
|
+
- **Widget Keyword**: Any Tk widget (e.g. `Tk::Tile::Label`) or toplevel window (e.g. `TkRoot`) may be declared by its lower-case underscored name without the namespace (e.g. `label` or `root`). This is called a keyword and is represented in the Glimmer GUI DSL by a Ruby method behind the scenes.
|
101
|
+
- **Args**: Any keyword method may optionally take arguments surrounded by parentheses (e.g. a `frame` nested under a `notebook` may receive tab options like `frame(text: 'Users')`, which gets used behind the scenes by Tk code such as `notebook.add tab, text: 'Users'`)
|
102
|
+
- **Content/Options Block**: Any keyword may optionally be followed by a Ruby curly-brace block
|
103
|
+
|
104
|
+
Example of an app written in [Tk](https://www.tcl.tk/) imperative syntax:
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
root = TkRoot.new
|
108
|
+
root.title = 'Hello, Tab!'
|
109
|
+
|
110
|
+
notebook = ::Tk::Tile::Notebook.new(root).grid
|
111
|
+
|
112
|
+
tab1 = ::Tk::Tile::Frame.new(notebook).grid
|
113
|
+
notebook.add tab1, text: 'English'
|
114
|
+
label1 = ::Tk::Tile::Label.new(tab1).grid
|
115
|
+
label1.text = 'Hello, World!'
|
116
|
+
|
117
|
+
tab2 = ::Tk::Tile::Frame.new(notebook).grid
|
118
|
+
notebook.add tab2, text: 'French'
|
119
|
+
label2 = ::Tk::Tile::Label.new(tab2).grid
|
120
|
+
label2.text = 'Bonjour, Univers!'
|
121
|
+
|
122
|
+
root.mainloop
|
123
|
+
```
|
124
|
+
|
125
|
+
Example of the same app written in [Glimmer](https://github.com/AndyObtiva/glimmer) declarative syntax:
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
root {
|
129
|
+
title 'Hello, Tab!'
|
130
|
+
|
131
|
+
notebook {
|
132
|
+
frame(text: 'English') {
|
133
|
+
label {
|
134
|
+
text 'Hello, World!'
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
frame(text: 'French') {
|
139
|
+
label {
|
140
|
+
text 'Bonjour, Univers!'
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}.open
|
145
|
+
```
|
146
|
+
|
147
|
+
## Samples
|
58
148
|
|
59
|
-
### Hello, World
|
149
|
+
### Hello, World!
|
60
150
|
|
61
151
|
Glimmer code (from [samples/hello/hello_world.rb](samples/hello/hello_world.rb)):
|
62
152
|
|
@@ -68,16 +158,51 @@ root {
|
|
68
158
|
}.open
|
69
159
|
```
|
70
160
|
|
71
|
-
Run:
|
161
|
+
Run (with the [glimmer-dsl-tk](https://rubygems.org/gems/glimmer-dsl-tk) gem installed):
|
72
162
|
|
73
163
|
```
|
74
|
-
ruby samples/hello/hello_world.rb
|
164
|
+
ruby -e "gem 'glimmer-dsl-tk'; require '../samples/hello/hello_world.rb'"
|
75
165
|
```
|
76
166
|
|
77
167
|
Glimmer app:
|
78
168
|
|
79
169
|
![glimmer dsl tk screenshot sample hello world](images/glimmer-dsl-tk-screenshot-sample-hello-world.png)
|
80
170
|
|
171
|
+
### Hello, Tab!
|
172
|
+
|
173
|
+
Glimmer code (from [samples/hello/hello_tab.rb](samples/hello/hello_tab.rb)):
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
root {
|
177
|
+
title 'Hello, Tab!'
|
178
|
+
|
179
|
+
notebook {
|
180
|
+
frame(text: 'English') {
|
181
|
+
label {
|
182
|
+
text 'Hello, World!'
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
frame(text: 'French') {
|
187
|
+
label {
|
188
|
+
text 'Bonjour, Univers!'
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}.open
|
193
|
+
```
|
194
|
+
|
195
|
+
Run (with the [glimmer-dsl-tk](https://rubygems.org/gems/glimmer-dsl-tk) gem installed):
|
196
|
+
|
197
|
+
```
|
198
|
+
ruby -e "gem 'glimmer-dsl-tk'; require '../samples/hello/hello_tab.rb'"
|
199
|
+
```
|
200
|
+
|
201
|
+
Glimmer app:
|
202
|
+
|
203
|
+
![glimmer dsl tk screenshot sample hello tab English](images/glimmer-dsl-tk-screenshot-sample-hello-tab-english.png)
|
204
|
+
![glimmer dsl tk screenshot sample hello tab French](images/glimmer-dsl-tk-screenshot-sample-hello-tab-french.png)
|
205
|
+
|
81
206
|
## Help
|
82
207
|
|
83
208
|
### Issues
|
@@ -90,9 +215,13 @@ You may submit [issues](https://github.com/AndyObtiva/glimmer/issues) on [GitHub
|
|
90
215
|
|
91
216
|
If you need live help, try to [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
92
217
|
|
218
|
+
## Process
|
219
|
+
|
220
|
+
[Glimmer Process](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md)
|
221
|
+
|
93
222
|
## Feature Suggestions
|
94
223
|
|
95
|
-
These features have been suggested. You might see them in a future version of Glimmer. You are welcome to contribute more feature suggestions.
|
224
|
+
These features have been suggested. You might see them in a future version of Glimmer DSL for Tk. You are welcome to contribute more feature suggestions.
|
96
225
|
|
97
226
|
[TODO.md](TODO.md)
|
98
227
|
|
@@ -108,7 +237,7 @@ These features have been suggested. You might see them in a future version of Gl
|
|
108
237
|
|
109
238
|
* [Andy Maleh](https://github.com/AndyObtiva) (Founder)
|
110
239
|
|
111
|
-
[Click here to view contributor commits.](https://github.com/AndyObtiva/glimmer-dsl-
|
240
|
+
[Click here to view contributor commits.](https://github.com/AndyObtiva/glimmer-dsl-tk/graphs/contributors)
|
112
241
|
|
113
242
|
## License
|
114
243
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/glimmer-dsl-tk.rb
CHANGED
@@ -38,7 +38,7 @@ module Glimmer
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def interpret(parent, keyword, *args, &block)
|
41
|
-
Glimmer::Tk::WidgetProxy.
|
41
|
+
Glimmer::Tk::WidgetProxy.create(keyword, parent, args, &block)
|
42
42
|
end
|
43
43
|
|
44
44
|
def add_content(parent, &block)
|
@@ -52,3 +52,5 @@ module Glimmer
|
|
52
52
|
end
|
53
53
|
|
54
54
|
require 'glimmer/tk/widget_proxy'
|
55
|
+
require 'glimmer/tk/notebook_proxy'
|
56
|
+
require 'glimmer/tk/frame_proxy'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2020 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/tk/widget_proxy'
|
23
|
+
|
24
|
+
module Glimmer
|
25
|
+
module Tk
|
26
|
+
# Proxy for Tk::Tile::Frame
|
27
|
+
#
|
28
|
+
# Follows the Proxy Design Pattern
|
29
|
+
class FrameProxy < WidgetProxy
|
30
|
+
attr_reader :tab_options
|
31
|
+
|
32
|
+
def initialize(underscored_widget_name, parent_proxy, args)
|
33
|
+
if parent_proxy.is_a?(NotebookProxy)
|
34
|
+
@tab_options, args[0] = args[0].to_h.partition {|key, value| NotebookProxy::TAB_OPTIONS.include?(key.to_s)}
|
35
|
+
@tab_options = Hash[@tab_options]
|
36
|
+
args.delete_at(0) if args[0].to_a.empty?
|
37
|
+
end
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright (c) 2020 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/tk/widget_proxy'
|
23
|
+
|
24
|
+
module Glimmer
|
25
|
+
module Tk
|
26
|
+
# Proxy for Tk::Tile::Notebook
|
27
|
+
#
|
28
|
+
# Follows the Proxy Design Pattern
|
29
|
+
class NotebookProxy < WidgetProxy
|
30
|
+
TAB_OPTIONS = ['state', 'sticky', 'padding', 'text', 'image', 'compound', 'underline']
|
31
|
+
|
32
|
+
attr_reader :tab_proxies
|
33
|
+
|
34
|
+
def initialize(*args)
|
35
|
+
@tab_proxies = []
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def post_initialize_child(child)
|
40
|
+
@tab_proxies << child
|
41
|
+
@tk_widget.add child.tk_widget, child.tab_options
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -25,22 +25,43 @@ module Glimmer
|
|
25
25
|
#
|
26
26
|
# Follows the Proxy Design Pattern
|
27
27
|
class WidgetProxy
|
28
|
-
attr_reader :parent_proxy, :tk_widget, :
|
28
|
+
attr_reader :parent_proxy, :tk_widget, :args
|
29
29
|
|
30
30
|
DEFAULT_INITIALIZERS = {
|
31
|
-
'label' => lambda do |
|
32
|
-
|
31
|
+
'label' => lambda do |widget|
|
32
|
+
widget.grid
|
33
|
+
end,
|
34
|
+
'frame' => lambda do |widget|
|
35
|
+
widget.grid
|
36
|
+
end,
|
37
|
+
'notebook' => lambda do |widget|
|
38
|
+
widget.grid
|
33
39
|
end,
|
34
40
|
}
|
35
41
|
|
42
|
+
class << self
|
43
|
+
def create(keyword, parent, args)
|
44
|
+
widget_proxy_class(keyword).new(keyword, parent, args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def widget_proxy_class(keyword)
|
48
|
+
begin
|
49
|
+
class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
|
50
|
+
Glimmer::Tk.const_get(class_name)
|
51
|
+
rescue
|
52
|
+
Glimmer::Tk::WidgetProxy
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
36
57
|
# Initializes a new Tk Widget
|
37
58
|
#
|
38
59
|
# Styles is a comma separate list of symbols representing Tk styles in lower case
|
39
|
-
def initialize(
|
40
|
-
|
41
|
-
@
|
60
|
+
def initialize(underscored_widget_name, parent_proxy, args)
|
61
|
+
@parent_proxy = parent_proxy
|
62
|
+
@args = args
|
42
63
|
tk_widget_class = self.class.tk_widget_class_for(underscored_widget_name)
|
43
|
-
@tk_widget = tk_widget_class.new(@parent_proxy.tk_widget, *
|
64
|
+
@tk_widget = tk_widget_class.new(@parent_proxy.tk_widget, *args)
|
44
65
|
DEFAULT_INITIALIZERS[underscored_widget_name]&.call(@tk_widget)
|
45
66
|
@parent_proxy.post_initialize_child(self)
|
46
67
|
end
|
@@ -61,7 +82,7 @@ module Glimmer
|
|
61
82
|
|
62
83
|
# This supports widgets in and out of basic Tk
|
63
84
|
def self.tk_widget_class_for(underscored_widget_name)
|
64
|
-
tk_widget_name = "::Tk::Tile::#{underscored_widget_name.camelcase(:upper)}"
|
85
|
+
tk_widget_name = "::Tk::Tile::#{underscored_widget_name.camelcase(:upper)}"
|
65
86
|
tk_widget_class = eval(tk_widget_name)
|
66
87
|
tk_widget_class
|
67
88
|
rescue SyntaxError, NameError => e
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'glimmer-dsl-tk'
|
2
|
+
|
3
|
+
class HelloTab
|
4
|
+
include Glimmer
|
5
|
+
|
6
|
+
def launch
|
7
|
+
root {
|
8
|
+
title 'Hello, Tab!'
|
9
|
+
|
10
|
+
notebook {
|
11
|
+
frame(text: 'English') {
|
12
|
+
label {
|
13
|
+
text 'Hello, World!'
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
frame(text: 'French') {
|
18
|
+
label {
|
19
|
+
text 'Bonjour, Univers!'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}.open
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
HelloTab.new.launch
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-tk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- andy_maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -16,28 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.10.
|
19
|
+
version: 0.10.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.10.
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: super_module
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.4.1
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.4.1
|
26
|
+
version: 0.10.3
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: puts_debuggerer
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,134 +38,6 @@ dependencies:
|
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: 0.10.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake-tui
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.2.1
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.2.1
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: git-glimmer
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 1.7.0
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 1.7.0
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: jeweler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 2.3.9
|
90
|
-
- - "<"
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 3.0.0
|
93
|
-
type: :runtime
|
94
|
-
prerelease: false
|
95
|
-
version_requirements: !ruby/object:Gem::Requirement
|
96
|
-
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: 2.3.9
|
100
|
-
- - "<"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 3.0.0
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: logging
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 2.3.0
|
110
|
-
- - "<"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: 3.0.0
|
113
|
-
type: :runtime
|
114
|
-
prerelease: false
|
115
|
-
version_requirements: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: 2.3.0
|
120
|
-
- - "<"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 3.0.0
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: os
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - ">="
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: 1.0.0
|
130
|
-
- - "<"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: 2.0.0
|
133
|
-
type: :runtime
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - ">="
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: 1.0.0
|
140
|
-
- - "<"
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: 2.0.0
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: rake
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
requirements:
|
147
|
-
- - ">="
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: 10.1.0
|
150
|
-
- - "<"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 14.0.0
|
153
|
-
type: :runtime
|
154
|
-
prerelease: false
|
155
|
-
version_requirements: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: 10.1.0
|
160
|
-
- - "<"
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: 14.0.0
|
163
|
-
- !ruby/object:Gem::Dependency
|
164
|
-
name: text-table
|
165
|
-
requirement: !ruby/object:Gem::Requirement
|
166
|
-
requirements:
|
167
|
-
- - ">="
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: 1.2.4
|
170
|
-
- - "<"
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: 2.0.0
|
173
|
-
type: :runtime
|
174
|
-
prerelease: false
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
requirements:
|
177
|
-
- - ">="
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: 1.2.4
|
180
|
-
- - "<"
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 2.0.0
|
183
41
|
- !ruby/object:Gem::Dependency
|
184
42
|
name: tk
|
185
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,7 +108,41 @@ dependencies:
|
|
250
108
|
- - ">="
|
251
109
|
- !ruby/object:Gem::Version
|
252
110
|
version: '0'
|
253
|
-
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: jeweler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.3.9
|
118
|
+
- - "<"
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 3.0.0
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 2.3.9
|
128
|
+
- - "<"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 3.0.0
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: rake-tui
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 0.2.1
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 0.2.1
|
145
|
+
description: Glimmer DSL for Tk (Ruby Desktop GUI)
|
254
146
|
email: andy.am@gmail.com
|
255
147
|
executables: []
|
256
148
|
extensions: []
|
@@ -268,8 +160,11 @@ files:
|
|
268
160
|
- lib/glimmer/dsl/tk/dsl.rb
|
269
161
|
- lib/glimmer/dsl/tk/root_expression.rb
|
270
162
|
- lib/glimmer/dsl/tk/widget_expression.rb
|
163
|
+
- lib/glimmer/tk/frame_proxy.rb
|
164
|
+
- lib/glimmer/tk/notebook_proxy.rb
|
271
165
|
- lib/glimmer/tk/root_proxy.rb
|
272
166
|
- lib/glimmer/tk/widget_proxy.rb
|
167
|
+
- samples/hello/hello_tab.rb
|
273
168
|
- samples/hello/hello_world.rb
|
274
169
|
homepage: http://github.com/AndyObtiva/glimmer-dsl-tk
|
275
170
|
licenses:
|
@@ -293,5 +188,5 @@ requirements: []
|
|
293
188
|
rubygems_version: 3.1.2
|
294
189
|
signing_key:
|
295
190
|
specification_version: 4
|
296
|
-
summary: Glimmer DSL for
|
191
|
+
summary: Glimmer DSL for Tk
|
297
192
|
test_files: []
|