glimmer 0.5.0 → 0.5.2
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 +4 -4
- data/README.markdown +59 -3
- data/lib/glimmer.rb +1 -1
- data/lib/glimmer/rake_task.rb +24 -0
- data/lib/glimmer/swt/widget_proxy.rb +9 -3
- data/lib/glimmer/ui/video.rb +19 -1
- metadata +39 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c305f675b946595a08012449c49518559acb8238f486c154b3720c0428b5c88
|
4
|
+
data.tar.gz: 3f5d4ece86f4c737f7d0ae9cb1f6f235fca33694653c6a760afe33fcc6117692
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42ea536ecec59e08a94f1dd561b614d6eb64f4d44c8c2ac9de8ef4170a3f6399659de613cd08acb52b2fea68524f65e28e578ecdfa64842f6faf8711efc3b076
|
7
|
+
data.tar.gz: 245ace0d9f7f92efc9071c86b96de8a64b2b624c8194ae5af85c9f74ea77db924028f5cc57505807c7f309d5d8688a0d072e5a50ad40e9e4d0c01ae62dc6b32c
|
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Glimmer 0.5.
|
1
|
+
# Glimmer 0.5.2 Beta (JRuby Desktop UI DSL + Data-Binding)
|
2
2
|
[](https://coveralls.io/github/AndyObtiva/glimmer?branch=master)
|
3
3
|
|
4
4
|
Glimmer is a native-UI cross-platform desktop development library written in Ruby. Glimmer's main innovation is a JRuby DSL that enables productive and efficient authoring of desktop application user-interfaces while relying on the robust platform-native Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support to greatly facilitate synchronizing the UI with domain models. As a result, that achieves true decoupling of object oriented components, enabling developers to solve business problems without worrying about UI concerns, or alternatively drive development UI-first, and then write clean business components test-first afterwards.
|
@@ -111,14 +111,14 @@ Please follow these instructions to make the `glimmer` command available on your
|
|
111
111
|
|
112
112
|
Run this command to install directly:
|
113
113
|
```
|
114
|
-
jgem install glimmer -v 0.5.
|
114
|
+
jgem install glimmer -v 0.5.2
|
115
115
|
```
|
116
116
|
|
117
117
|
### Option 2: Bundler
|
118
118
|
|
119
119
|
Add the following to `Gemfile`:
|
120
120
|
```
|
121
|
-
gem 'glimmer', '~> 0.5.
|
121
|
+
gem 'glimmer', '~> 0.5.2'
|
122
122
|
```
|
123
123
|
|
124
124
|
And, then run:
|
@@ -1188,6 +1188,36 @@ Last but not least, these are the available hooks:
|
|
1188
1188
|
- `before_body`: takes a block that executes in the custom widget instance scope before calling `body`. Useful for initializing variables to later use in `body`
|
1189
1189
|
- `after_body`: takes a block that executes in the custom widget instance scope after calling `body`. Useful for setting up observers on widgets built in `body` (set in instance variables) and linking to other shells.
|
1190
1190
|
|
1191
|
+
#### Gotcha
|
1192
|
+
|
1193
|
+
Beware of defining a custom attribute that is a common SWT widget property name.
|
1194
|
+
For example, if you define `text=` and `text` methods to accept a custom text and then later you write this body:
|
1195
|
+
|
1196
|
+
```ruby
|
1197
|
+
# ...
|
1198
|
+
def text
|
1199
|
+
# ...
|
1200
|
+
end
|
1201
|
+
|
1202
|
+
def text=(value)
|
1203
|
+
# ...
|
1204
|
+
end
|
1205
|
+
|
1206
|
+
body {
|
1207
|
+
composite {
|
1208
|
+
label {
|
1209
|
+
text "Hello"
|
1210
|
+
}
|
1211
|
+
label {
|
1212
|
+
text "World"
|
1213
|
+
}
|
1214
|
+
}
|
1215
|
+
}
|
1216
|
+
# ...
|
1217
|
+
```
|
1218
|
+
|
1219
|
+
The `text` method invoked in the custom widget body will call the one you defined above it. To avoid this gotcha, simply name the text property above something else, like `custom_text`.
|
1220
|
+
|
1191
1221
|
### Custom Shells
|
1192
1222
|
|
1193
1223
|
Custom shells are a kind of custom widgets that have shells only as the body root. They can be self-contained applications that may be opened and hidden/closed independently of the main app.
|
@@ -1542,6 +1572,32 @@ Example:
|
|
1542
1572
|
jruby -J-XstartOnFirstThread -J-classpath "path_to/swt.jar" -r glimmer -S application.rb
|
1543
1573
|
```
|
1544
1574
|
|
1575
|
+
## Packaging
|
1576
|
+
|
1577
|
+
Glimmer apps may be packaged and distributed on the Mac, Windows, and Linux via these tools:
|
1578
|
+
- Warbler (https://github.com/jruby/warbler): Enables bundling a Glimmer app into a JAR file
|
1579
|
+
- javapackager (https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html): Enables packaging a JAR file as a DMG file on Mac, EXE on Windows, and multiple Linux supported formats on Linux.
|
1580
|
+
|
1581
|
+
Glimmer simplifies the process for general packaging on the Mac by providing a rake task.
|
1582
|
+
|
1583
|
+
- Create `Rakefile` in your app root directory
|
1584
|
+
- Add the following line to it: `require 'glimmer/rake_task'`
|
1585
|
+
|
1586
|
+
Now, you can run the following command to package your app into a Mac DMG file (using both Warbler and javapackager):
|
1587
|
+
```
|
1588
|
+
rake glimmer:package
|
1589
|
+
```
|
1590
|
+
|
1591
|
+
This will generate a JAR file under `./dist` directory and DMG file under `./packages/bundles`. Both will match your application local directory name (e.g. `MathBowling.jar` and `MathBowling-1.0.dmg` for `~/code/MathBowling`)
|
1592
|
+
|
1593
|
+
By default, the package only includes these directories: app, config, db, lib, script, bin, images, sounds, videos
|
1594
|
+
|
1595
|
+
After running once, you will find a `config/warble.rb` file. It has the JAR packaging configuration. You may adjust included directories in it if needed, and then rerun `rake glimmer:package` and it will pick up your custom configuration.
|
1596
|
+
|
1597
|
+
Otherwise, you may find more advanced instructions for javapackager (https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGICFDB) and (https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html) in order to sign your Mac app and distribute on the App Store.
|
1598
|
+
|
1599
|
+
Additionally, read their documentation on how to set an icon/assets for the application: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html
|
1600
|
+
|
1545
1601
|
## Resources
|
1546
1602
|
|
1547
1603
|
* [Eclipse Zone Tutorial](http://eclipse.dzone.com/articles/an-introduction-glimmer)
|
data/lib/glimmer.rb
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
# interfaces using the robust platform-independent Eclipse SWT library. Glimmer
|
3
3
|
# comes with built-in data-binding support to greatly facilitate synchronizing
|
4
4
|
# UI with domain models.
|
5
|
-
|
6
5
|
require 'facets'
|
7
6
|
require 'super_module'
|
8
7
|
require 'logger'
|
9
8
|
require 'java'
|
10
9
|
require 'set'
|
11
10
|
require 'nested_inherited_jruby_include_package'
|
11
|
+
require 'fileutils'
|
12
12
|
|
13
13
|
# Glimmer provides a JRuby Desktop UI DSL + Data-Binding functionality
|
14
14
|
#
|
@@ -0,0 +1,24 @@
|
|
1
|
+
namespace :glimmer do
|
2
|
+
desc 'Package app for distribution'
|
3
|
+
task :package do
|
4
|
+
project_name = File.basename(File.expand_path('.'))
|
5
|
+
if !File.exists?('config/warble.rb')
|
6
|
+
system('mkdir -p config')
|
7
|
+
system('warble config')
|
8
|
+
new_config = File.read('config/warble.rb').split("\n").inject('') do |output, line|
|
9
|
+
if line.include?('config.dirs =')
|
10
|
+
line = line.sub('# ', '').sub(/=[^=\n]+$/, '= %w(app config db lib script bin images sounds videos)')
|
11
|
+
end
|
12
|
+
if line.include?('config.autodeploy_dir =')
|
13
|
+
line = line.sub('# ', '')
|
14
|
+
end
|
15
|
+
output + "\n" + line
|
16
|
+
end
|
17
|
+
File.write('config/warble.rb', new_config)
|
18
|
+
end
|
19
|
+
system('mkdir -p dist')
|
20
|
+
system('warble')
|
21
|
+
puts("javapackager -deploy -native -outdir packages -outfile #{project_name} -srcdir dist -srcfiles #{project_name}.jar -appclass JarMain -name \"#{project_name}\" -title \"#{project_name}\" -BjvmOptions=-XstartOnFirstThread")
|
22
|
+
system("javapackager -deploy -native -outdir packages -outfile #{project_name} -srcdir dist -srcfiles #{project_name}.jar -appclass JarMain -name \"#{project_name}\" -title \"#{project_name}\" -BjvmOptions=-XstartOnFirstThread")
|
23
|
+
end
|
24
|
+
end
|
@@ -239,8 +239,8 @@ module Glimmer
|
|
239
239
|
|
240
240
|
def add_listener(underscored_listener_name, &block)
|
241
241
|
widget_add_listener_method, listener_class, listener_method = self.class.find_listener(@swt_widget.getClass, underscored_listener_name)
|
242
|
-
listener = listener_class.new(listener_method
|
243
|
-
@swt_widget.send(widget_add_listener_method
|
242
|
+
listener = listener_class.new(listener_method => block)
|
243
|
+
@swt_widget.send(widget_add_listener_method, listener)
|
244
244
|
WidgetListenerProxy.new(listener)
|
245
245
|
end
|
246
246
|
|
@@ -257,7 +257,7 @@ module Glimmer
|
|
257
257
|
widget_add_listener_method.getParameterTypes.each do |listener_type|
|
258
258
|
listener_type.getMethods.each do |listener_method|
|
259
259
|
if (listener_method.getName == listener_method_name)
|
260
|
-
@listeners[listener_key] = [widget_add_listener_method, listener_class(listener_type), listener_method]
|
260
|
+
@listeners[listener_key] = [widget_add_listener_method.getName, listener_class(listener_type), listener_method.getName]
|
261
261
|
return @listeners[listener_key]
|
262
262
|
end
|
263
263
|
end
|
@@ -329,6 +329,12 @@ module Glimmer
|
|
329
329
|
:background => color_converter,
|
330
330
|
:background_image => proc do |value|
|
331
331
|
if value.is_a?(String)
|
332
|
+
if value.start_with?('uri:classloader')
|
333
|
+
value = value.sub(/^uri\:classloader\:\//, '')
|
334
|
+
object = java.lang.Object.new
|
335
|
+
value = object.java_class.resource_as_stream(value)
|
336
|
+
value = java.io.BufferedInputStream.new(value)
|
337
|
+
end
|
332
338
|
image_data = ImageData.new(value)
|
333
339
|
# TODO in the future, look into unregistering this listener when no longer needed
|
334
340
|
on_event_Resize do |resize_event|
|
data/lib/glimmer/ui/video.rb
CHANGED
@@ -74,7 +74,25 @@ module Glimmer
|
|
74
74
|
}
|
75
75
|
|
76
76
|
def source
|
77
|
-
|
77
|
+
file_source = file
|
78
|
+
if file_source
|
79
|
+
if file_source.start_with?('uri:classloader')
|
80
|
+
file_path = file_source.split(/\/\//).last
|
81
|
+
file_name = File.basename(file_source)
|
82
|
+
# supporting windows ENV['temp'] or mac/unix /tmp
|
83
|
+
tmp_dir = ENV['temp'] ? File.expand_path(ENV['temp']) : '/tmp'
|
84
|
+
tmp_dir += '/glimmer/lib/glimmer/ui/video'
|
85
|
+
FileUtils.mkdir_p(tmp_dir)
|
86
|
+
tmp_file = File.join(tmp_dir, file_name)
|
87
|
+
file_content = File.binread(file_source) rescue File.binread(file_path)
|
88
|
+
File.binwrite(tmp_file, file_content)
|
89
|
+
"file://#{tmp_file}"
|
90
|
+
else
|
91
|
+
"file://#{file_source}"
|
92
|
+
end
|
93
|
+
else
|
94
|
+
url
|
95
|
+
end
|
78
96
|
end
|
79
97
|
|
80
98
|
def play
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- -
|
16
|
+
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: 3.1.0
|
19
19
|
name: facets
|
@@ -21,13 +21,13 @@ dependencies:
|
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
|
-
- -
|
30
|
+
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.0
|
33
33
|
name: os
|
@@ -35,13 +35,13 @@ dependencies:
|
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 1.4.0
|
47
47
|
name: super_module
|
@@ -49,13 +49,13 @@ dependencies:
|
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- -
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 0.3.0
|
61
61
|
name: nested_inherited_jruby_include_package
|
@@ -63,9 +63,37 @@ dependencies:
|
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.0.5
|
75
|
+
name: warbler
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.0.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 10.0.0
|
89
|
+
name: rake
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 10.0.0
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
requirement: !ruby/object:Gem::Requirement
|
71
99
|
requirements:
|
@@ -225,6 +253,7 @@ files:
|
|
225
253
|
- lib/glimmer/error.rb
|
226
254
|
- lib/glimmer/invalid_keyword_error.rb
|
227
255
|
- lib/glimmer/launcher.rb
|
256
|
+
- lib/glimmer/rake_task.rb
|
228
257
|
- lib/glimmer/swt/color_proxy.rb
|
229
258
|
- lib/glimmer/swt/display_proxy.rb
|
230
259
|
- lib/glimmer/swt/font_proxy.rb
|