glimmer-dsl-swt 4.22.0.0 → 4.22.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +207 -169
- data/README.md +10 -10
- data/RUBY_VERSION +1 -1
- data/VERSION +1 -1
- data/docs/reference/GLIMMER_COMMAND.md +21 -7
- data/docs/reference/GLIMMER_CONFIGURATION.md +14 -3
- data/docs/reference/GLIMMER_GIRB.md +1 -1
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +743 -113
- data/docs/reference/GLIMMER_SAMPLES.md +22 -8
- data/glimmer-dsl-swt.gemspec +0 -0
- data/lib/ext/glimmer/config.rb +41 -24
- data/lib/glimmer/data_binding/observable_widget.rb +6 -6
- data/lib/glimmer/data_binding/widget_binding.rb +2 -1
- data/lib/glimmer/dsl/swt/dsl.rb +1 -1
- data/lib/glimmer/dsl/swt/observe_expression.rb +2 -1
- data/lib/glimmer/dsl/swt/shape_expression.rb +1 -0
- data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +3 -8
- data/lib/glimmer/dsl/swt/transform_expression.rb +1 -1
- data/lib/glimmer/launcher.rb +16 -15
- data/lib/glimmer/rake_task/scaffold.rb +5 -16
- data/lib/glimmer/swt/color_proxy.rb +5 -5
- data/lib/glimmer/swt/custom/drawable.rb +4 -0
- data/lib/glimmer/swt/custom/shape/line.rb +0 -1
- data/lib/glimmer/swt/custom/shape/path.rb +2 -2
- data/lib/glimmer/swt/custom/shape/path_segment.rb +2 -2
- data/lib/glimmer/swt/custom/shape/point.rb +8 -1
- data/lib/glimmer/swt/custom/shape.rb +171 -69
- data/lib/glimmer/swt/display_proxy.rb +15 -10
- data/lib/glimmer/swt/image_proxy.rb +5 -5
- data/lib/glimmer/swt/message_box_proxy.rb +5 -5
- data/lib/glimmer/swt/shape_listener_proxy.rb +55 -0
- data/lib/glimmer/swt/shell_proxy.rb +1 -0
- data/lib/glimmer/swt/transform_proxy.rb +3 -3
- data/lib/glimmer/swt/tray_proxy.rb +4 -4
- data/lib/glimmer/swt/widget_proxy.rb +5 -7
- data/lib/glimmer/ui/custom_shape.rb +34 -10
- data/lib/glimmer/ui/custom_widget.rb +3 -8
- data/lib/glimmer-dsl-swt.rb +6 -2
- data/samples/elaborate/klondike_solitaire/model/column_pile.rb +0 -1
- data/samples/elaborate/klondike_solitaire/view/column_pile.rb +3 -16
- data/samples/elaborate/klondike_solitaire/view/dealing_pile.rb +1 -1
- data/samples/elaborate/klondike_solitaire/view/dealt_pile.rb +12 -5
- data/samples/elaborate/klondike_solitaire/view/empty_playing_card.rb +2 -1
- data/samples/elaborate/klondike_solitaire/view/foundation_pile.rb +2 -2
- data/samples/elaborate/klondike_solitaire/view/hidden_playing_card.rb +2 -2
- data/samples/elaborate/klondike_solitaire/view/klondike_solitaire_menu_bar.rb +60 -0
- data/samples/elaborate/klondike_solitaire/view/playing_card.rb +3 -2
- data/samples/elaborate/klondike_solitaire.rb +13 -55
- data/samples/elaborate/mandelbrot_fractal.rb +3 -1
- data/samples/elaborate/quarto/model/game.rb +124 -0
- data/samples/elaborate/quarto/model/piece/cube.rb +31 -0
- data/samples/elaborate/quarto/model/piece/cylinder.rb +31 -0
- data/samples/elaborate/quarto/model/piece.rb +70 -0
- data/samples/elaborate/quarto/view/available_pieces_area.rb +72 -0
- data/samples/elaborate/quarto/view/board.rb +65 -0
- data/samples/elaborate/quarto/view/cell.rb +85 -0
- data/samples/elaborate/quarto/view/cube.rb +73 -0
- data/samples/elaborate/quarto/view/cylinder.rb +72 -0
- data/samples/elaborate/quarto/view/message_box_panel.rb +114 -0
- data/samples/elaborate/quarto/view/piece.rb +56 -0
- data/samples/elaborate/quarto/view/selected_piece_area.rb +69 -0
- data/samples/elaborate/quarto.rb +188 -0
- data/samples/hello/hello_canvas_data_binding.rb +7 -7
- data/samples/hello/hello_custom_widget.rb +23 -5
- metadata +35 -40
- data/bin/glimmer_runner.rb +0 -4
@@ -0,0 +1,69 @@
|
|
1
|
+
# Copyright (c) 2007-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_relative 'piece'
|
23
|
+
|
24
|
+
class Quarto
|
25
|
+
module View
|
26
|
+
class SelectedPieceArea
|
27
|
+
include Glimmer::UI::CustomShape
|
28
|
+
|
29
|
+
options :game
|
30
|
+
option :location_x, default: 0
|
31
|
+
option :location_y, default: 0
|
32
|
+
|
33
|
+
attr_reader :selected_piece
|
34
|
+
|
35
|
+
body {
|
36
|
+
rectangle(location_x, location_y, PIECES_AREA_WIDTH, SELECTED_PIECE_AREA_HEIGHT) {
|
37
|
+
background COLOR_WOOD
|
38
|
+
|
39
|
+
rectangle(0, 0, :max, :max, round: true) { # border
|
40
|
+
foreground :black
|
41
|
+
line_width 2
|
42
|
+
}
|
43
|
+
|
44
|
+
text('Selected Piece', 15, 10) {
|
45
|
+
font height: 18, style: :bold
|
46
|
+
}
|
47
|
+
|
48
|
+
on_drop do |drop_event|
|
49
|
+
dragged_piece = drop_event.dragged_shape
|
50
|
+
if dragged_piece.parent.get_data('custom_shape').is_a?(AvailablePiecesArea)
|
51
|
+
model = dragged_piece.get_data('custom_shape').model
|
52
|
+
dragged_piece.dispose
|
53
|
+
body_root.content {
|
54
|
+
@selected_piece = piece(game: game, model: model, location_x: 15, location_y: 15 + 25)
|
55
|
+
}
|
56
|
+
game.select_piece(model)
|
57
|
+
else
|
58
|
+
drop_event.doit = false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
def reset_selected_piece
|
65
|
+
@selected_piece&.dispose
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,188 @@
|
|
1
|
+
# Copyright (c) 2007-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-swt'
|
23
|
+
require 'yaml'
|
24
|
+
|
25
|
+
require_relative 'quarto/model/game'
|
26
|
+
require_relative 'quarto/view/board'
|
27
|
+
require_relative 'quarto/view/available_pieces_area'
|
28
|
+
require_relative 'quarto/view/selected_piece_area'
|
29
|
+
require_relative 'quarto/view/message_box_panel'
|
30
|
+
|
31
|
+
class Quarto
|
32
|
+
include Glimmer::UI::CustomShell
|
33
|
+
|
34
|
+
BOARD_DIAMETER = 430
|
35
|
+
PIECES_AREA_WIDTH = 252
|
36
|
+
AVAILABLE_PIECES_AREA_HEIGHT = 295
|
37
|
+
SELECTED_PIECE_AREA_HEIGHT = 124
|
38
|
+
CELL_DIAMETER = 68
|
39
|
+
CELL_LINE_WIDTH = 5
|
40
|
+
CELL_MARGIN = 7
|
41
|
+
SHELL_MARGIN = 15
|
42
|
+
AREA_MARGIN = 10
|
43
|
+
ROW_COUNT = 4
|
44
|
+
COLUMN_COUNT = 4
|
45
|
+
COLOR_WOOD = rgb(239, 196, 156)
|
46
|
+
COLOR_AREA = rgb(206, 188, 170)
|
47
|
+
COLOR_LIGHT_WOOD = rgb(254, 187, 120)
|
48
|
+
COLOR_DARK_WOOD = rgb(204, 108, 58)
|
49
|
+
FILE_QUARTO_CONFIG = File.join(Dir.home, '.quarto')
|
50
|
+
|
51
|
+
before_body do
|
52
|
+
load_quarto_config
|
53
|
+
@game = Model::Game.new
|
54
|
+
|
55
|
+
observe(@game, :current_move) do |new_move|
|
56
|
+
perform_current_move
|
57
|
+
end
|
58
|
+
|
59
|
+
observe(@game, :over) do |game_over_status|
|
60
|
+
if game_over_status
|
61
|
+
game_over_message = "Game Over! "
|
62
|
+
game_over_message += @game.winner_player_number.nil? ? "Draw!" : "Player #{@game.winner_player_number} wins!"
|
63
|
+
body_root.content {
|
64
|
+
@open_message_box_panel&.close
|
65
|
+
@open_message_box_panel = message_box_panel(
|
66
|
+
message: game_over_message,
|
67
|
+
background_color: COLOR_LIGHT_WOOD,
|
68
|
+
text_font: {height: 16}
|
69
|
+
) {
|
70
|
+
on_closed do
|
71
|
+
restart_game
|
72
|
+
end
|
73
|
+
}
|
74
|
+
}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
after_body do
|
80
|
+
perform_current_move
|
81
|
+
end
|
82
|
+
|
83
|
+
body {
|
84
|
+
shell(:shell_trim, (:double_buffered unless OS.mac?)) {
|
85
|
+
text 'Glimmer Quarto'
|
86
|
+
minimum_size BOARD_DIAMETER + AREA_MARGIN + PIECES_AREA_WIDTH + SHELL_MARGIN*2 + (OS.linux? ? 52 : (OS.windows? ? 16 : 0)), BOARD_DIAMETER + 24 + SHELL_MARGIN*2 + (OS.linux? ? 96 : (OS.windows? ? 32 : 0))
|
87
|
+
maximum_size BOARD_DIAMETER + AREA_MARGIN + PIECES_AREA_WIDTH + SHELL_MARGIN*2 + (OS.linux? ? 52 : (OS.windows? ? 16 : 0)), BOARD_DIAMETER + 24 + SHELL_MARGIN*2 + (OS.linux? ? 96 : (OS.windows? ? 32 : 0))
|
88
|
+
background COLOR_WOOD
|
89
|
+
|
90
|
+
quarto_menu_bar
|
91
|
+
|
92
|
+
@board = board(game: @game, location_x: SHELL_MARGIN, location_y: SHELL_MARGIN)
|
93
|
+
|
94
|
+
@available_pieces_area = available_pieces_area(game: @game, location_x: SHELL_MARGIN + BOARD_DIAMETER + AREA_MARGIN, location_y: SHELL_MARGIN)
|
95
|
+
@selected_piece_area = selected_piece_area(game: @game, location_x: SHELL_MARGIN + BOARD_DIAMETER + AREA_MARGIN, location_y: SHELL_MARGIN + AVAILABLE_PIECES_AREA_HEIGHT + AREA_MARGIN)
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
def quarto_menu_bar
|
100
|
+
menu_bar {
|
101
|
+
menu {
|
102
|
+
text 'Game'
|
103
|
+
|
104
|
+
menu_item {
|
105
|
+
text 'Restart'
|
106
|
+
|
107
|
+
on_widget_selected do
|
108
|
+
restart_game
|
109
|
+
end
|
110
|
+
}
|
111
|
+
|
112
|
+
menu_item {
|
113
|
+
text 'Exit'
|
114
|
+
|
115
|
+
on_widget_selected do
|
116
|
+
exit(0)
|
117
|
+
end
|
118
|
+
}
|
119
|
+
}
|
120
|
+
menu {
|
121
|
+
text 'Help'
|
122
|
+
|
123
|
+
menu_item(:check) {
|
124
|
+
text 'Help Pop-Ups Enabled'
|
125
|
+
selection <=> [self, :help_pop_ups_enabled]
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
def help_pop_ups_enabled
|
132
|
+
@quarto_config[:help_pop_ups_enabled]
|
133
|
+
end
|
134
|
+
alias help_pop_ups_enabled? help_pop_ups_enabled
|
135
|
+
|
136
|
+
def help_pop_ups_enabled=(new_value)
|
137
|
+
@quarto_config[:help_pop_ups_enabled] = new_value
|
138
|
+
save_quarto_config
|
139
|
+
end
|
140
|
+
|
141
|
+
def load_quarto_config
|
142
|
+
@quarto_config = YAML.load(File.read(FILE_QUARTO_CONFIG)) rescue {}
|
143
|
+
@quarto_config[:help_pop_ups_enabled] = true if @quarto_config[:help_pop_ups_enabled].nil?
|
144
|
+
@quarto_config
|
145
|
+
end
|
146
|
+
|
147
|
+
def save_quarto_config
|
148
|
+
File.write(FILE_QUARTO_CONFIG, YAML.dump(@quarto_config))
|
149
|
+
rescue => e
|
150
|
+
puts "Unable to save quarto config file to: #{@quarto_config}"
|
151
|
+
end
|
152
|
+
|
153
|
+
def perform_current_move
|
154
|
+
verbiage = nil
|
155
|
+
case @game.current_move
|
156
|
+
when :select_piece
|
157
|
+
@available_pieces_area.pieces.each {|piece| piece.drag_source = true}
|
158
|
+
verbiage = "Player #{@game.current_player_number} must drag a piece to the Selected Piece\narea for the other player to place on the board!"
|
159
|
+
when :place_piece
|
160
|
+
@available_pieces_area.pieces.each {|piece| piece.drag_source = false}
|
161
|
+
@selected_piece_area.selected_piece.drag_source = true
|
162
|
+
verbiage = "Player #{@game.current_player_number} must drag the selected piece to the board\nin order to place it!"
|
163
|
+
end
|
164
|
+
body_root.text = "Glimmer Quarto | Player #{@game.current_player_number} #{@game.current_move.to_s.split('_').map(&:capitalize).join(' ')}"
|
165
|
+
if help_pop_ups_enabled?
|
166
|
+
async_exec do
|
167
|
+
body_root.content {
|
168
|
+
@open_message_box_panel&.close
|
169
|
+
@open_message_box_panel = message_box_panel(
|
170
|
+
message: verbiage,
|
171
|
+
background_color: COLOR_LIGHT_WOOD,
|
172
|
+
text_font: {height: 16}
|
173
|
+
)
|
174
|
+
}
|
175
|
+
body_root.redraw
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def restart_game
|
181
|
+
@available_pieces_area.reset_pieces
|
182
|
+
@selected_piece_area.reset_selected_piece
|
183
|
+
@board.reset_cells
|
184
|
+
@game.restart
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
Quarto.launch
|
@@ -195,13 +195,13 @@ class HelloCanvasDataBinding
|
|
195
195
|
background :white
|
196
196
|
|
197
197
|
line {
|
198
|
-
x1
|
199
|
-
y1
|
200
|
-
x2
|
201
|
-
y2
|
202
|
-
foreground
|
203
|
-
line_width
|
204
|
-
line_style
|
198
|
+
x1 <= [self, :x1_value]
|
199
|
+
y1 <= [self, :y1_value]
|
200
|
+
x2 <= [self, :x2_value]
|
201
|
+
y2 <= [self, :y2_value]
|
202
|
+
foreground <= [self, :foreground_value, computed_by: [:foreground_red, :foreground_green, :foreground_blue]]
|
203
|
+
line_width <= [self, :line_width_value]
|
204
|
+
line_style <= [self, :line_style_value]
|
205
205
|
}
|
206
206
|
}
|
207
207
|
}
|
@@ -32,11 +32,24 @@ class GreetingLabel
|
|
32
32
|
option :greeting, default: 'Hello'
|
33
33
|
|
34
34
|
# internal attribute (not a custom widget option)
|
35
|
-
attr_accessor :
|
35
|
+
attr_accessor :label_color
|
36
|
+
|
37
|
+
def can_handle_observation_request?(event, &block)
|
38
|
+
event.to_s == 'on_color_changed' || super
|
39
|
+
end
|
40
|
+
|
41
|
+
def handle_observation_request(event, &block)
|
42
|
+
if event.to_s == 'on_color_changed'
|
43
|
+
@color_changed_handlers ||= []
|
44
|
+
@color_changed_handlers << block
|
45
|
+
else
|
46
|
+
super
|
47
|
+
end
|
48
|
+
end
|
36
49
|
|
37
50
|
before_body do
|
38
51
|
@font = {height: 24, style: :bold}
|
39
|
-
@
|
52
|
+
@label_color = :black
|
40
53
|
end
|
41
54
|
|
42
55
|
after_body do
|
@@ -44,7 +57,8 @@ class GreetingLabel
|
|
44
57
|
|
45
58
|
Thread.new {
|
46
59
|
colors.cycle { |color|
|
47
|
-
self.
|
60
|
+
self.label_color = color
|
61
|
+
@color_changed_handlers&.each {|handler| handler.call(color)}
|
48
62
|
sleep(1)
|
49
63
|
}
|
50
64
|
}
|
@@ -55,7 +69,7 @@ class GreetingLabel
|
|
55
69
|
label(swt_style) {
|
56
70
|
text "#{greeting}, #{name}!"
|
57
71
|
font @font
|
58
|
-
foreground <=> [self, :
|
72
|
+
foreground <=> [self, :label_color]
|
59
73
|
}
|
60
74
|
}
|
61
75
|
|
@@ -82,5 +96,9 @@ shell {
|
|
82
96
|
}
|
83
97
|
|
84
98
|
# the colors option cycles between colors for the label foreground every second
|
85
|
-
greeting_label(:center, name: 'Mary', greeting: 'Aloha', colors: [:red, :dark_green, :blue])
|
99
|
+
greeting_label(:center, name: 'Mary', greeting: 'Aloha', colors: [:red, :dark_green, :blue]) {
|
100
|
+
on_color_changed do |color|
|
101
|
+
puts "Label color changed: #{color}"
|
102
|
+
end
|
103
|
+
}
|
86
104
|
}.open
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-swt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.22.
|
4
|
+
version: 4.22.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-21 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
|
-
version: 2.5.
|
18
|
+
version: 2.5.5
|
19
19
|
name: glimmer
|
20
20
|
prerelease: false
|
21
21
|
type: :runtime
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.5.
|
26
|
+
version: 2.5.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
@@ -144,26 +144,6 @@ dependencies:
|
|
144
144
|
- - "<"
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: 2.0.0
|
147
|
-
- !ruby/object:Gem::Dependency
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 2.3.0
|
153
|
-
- - "<"
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version: 3.0.0
|
156
|
-
name: logging
|
157
|
-
prerelease: false
|
158
|
-
type: :runtime
|
159
|
-
version_requirements: !ruby/object:Gem::Requirement
|
160
|
-
requirements:
|
161
|
-
- - ">="
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
version: 2.3.0
|
164
|
-
- - "<"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 3.0.0
|
167
147
|
- !ruby/object:Gem::Dependency
|
168
148
|
requirement: !ruby/object:Gem::Requirement
|
169
149
|
requirements:
|
@@ -364,21 +344,22 @@ dependencies:
|
|
364
344
|
version: 0.7.0
|
365
345
|
description: Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a native-GUI
|
366
346
|
cross-platform desktop development library written in JRuby, an OS-threaded faster
|
367
|
-
JVM version of Ruby.
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
Glimmer also includes native-executable
|
378
|
-
libraries, thus enabling the delivery
|
379
|
-
DMG/PKG/APP files on the Mac, MSI/EXE
|
380
|
-
|
381
|
-
to creator Andy Maleh, EclipseCon/EclipseWorld/RubyConf
|
347
|
+
JVM version of Ruby. It includes SWT 4.22 (released November 24, 2021). Glimmer's
|
348
|
+
main innovation is a declarative Ruby DSL that enables productive and efficient
|
349
|
+
authoring of desktop application user-interfaces by relying on the robust Eclipse
|
350
|
+
SWT library. Glimmer additionally innovates by having built-in data-binding support,
|
351
|
+
which greatly facilitates synchronizing the GUI with domain models, thus achieving
|
352
|
+
true decoupling of object oriented components and enabling developers to solve business
|
353
|
+
problems (test-first) without worrying about GUI concerns, or alternatively drive
|
354
|
+
development GUI-first, and then write clean business models (test-first) afterwards.
|
355
|
+
Not only does Glimmer provide a large set of GUI widgets, but it also supports drawing
|
356
|
+
Canvas Graphics like Shapes and Animations. To get started quickly, Glimmer offers
|
357
|
+
scaffolding options for Apps, Gems, and Custom Widgets. Glimmer also includes native-executable
|
358
|
+
packaging support, sorely lacking in other libraries, thus enabling the delivery
|
359
|
+
of desktop apps written in Ruby as truly native DMG/PKG/APP files on the Mac, MSI/EXE
|
360
|
+
files on Windows, and DEB/RPM files on Linux. Glimmer was the first Ruby gem to
|
361
|
+
bring SWT (Standard Widget Toolkit) to Ruby, thanks to creator Andy Maleh, EclipseCon/EclipseWorld/RubyConf
|
362
|
+
speaker.
|
382
363
|
email: andy.am@gmail.com
|
383
364
|
executables:
|
384
365
|
- glimmer
|
@@ -404,7 +385,6 @@ files:
|
|
404
385
|
- bin/girb_runner.rb
|
405
386
|
- bin/glimmer
|
406
387
|
- bin/glimmer-setup
|
407
|
-
- bin/glimmer_runner.rb
|
408
388
|
- docs/reference/GLIMMER_COMMAND.md
|
409
389
|
- docs/reference/GLIMMER_CONFIGURATION.md
|
410
390
|
- docs/reference/GLIMMER_GIRB.md
|
@@ -522,6 +502,7 @@ files:
|
|
522
502
|
- lib/glimmer/swt/proxy_properties.rb
|
523
503
|
- lib/glimmer/swt/sash_form_proxy.rb
|
524
504
|
- lib/glimmer/swt/scrolled_composite_proxy.rb
|
505
|
+
- lib/glimmer/swt/shape_listener_proxy.rb
|
525
506
|
- lib/glimmer/swt/shell_proxy.rb
|
526
507
|
- lib/glimmer/swt/style_constantizable.rb
|
527
508
|
- lib/glimmer/swt/styled_text_proxy.rb
|
@@ -591,6 +572,7 @@ files:
|
|
591
572
|
- samples/elaborate/klondike_solitaire/view/empty_playing_card.rb
|
592
573
|
- samples/elaborate/klondike_solitaire/view/foundation_pile.rb
|
593
574
|
- samples/elaborate/klondike_solitaire/view/hidden_playing_card.rb
|
575
|
+
- samples/elaborate/klondike_solitaire/view/klondike_solitaire_menu_bar.rb
|
594
576
|
- samples/elaborate/klondike_solitaire/view/playing_card.rb
|
595
577
|
- samples/elaborate/klondike_solitaire/view/tableau.rb
|
596
578
|
- samples/elaborate/login.rb
|
@@ -601,6 +583,19 @@ files:
|
|
601
583
|
- samples/elaborate/parking/model/parking_floor.rb
|
602
584
|
- samples/elaborate/parking/model/parking_presenter.rb
|
603
585
|
- samples/elaborate/parking/model/parking_spot.rb
|
586
|
+
- samples/elaborate/quarto.rb
|
587
|
+
- samples/elaborate/quarto/model/game.rb
|
588
|
+
- samples/elaborate/quarto/model/piece.rb
|
589
|
+
- samples/elaborate/quarto/model/piece/cube.rb
|
590
|
+
- samples/elaborate/quarto/model/piece/cylinder.rb
|
591
|
+
- samples/elaborate/quarto/view/available_pieces_area.rb
|
592
|
+
- samples/elaborate/quarto/view/board.rb
|
593
|
+
- samples/elaborate/quarto/view/cell.rb
|
594
|
+
- samples/elaborate/quarto/view/cube.rb
|
595
|
+
- samples/elaborate/quarto/view/cylinder.rb
|
596
|
+
- samples/elaborate/quarto/view/message_box_panel.rb
|
597
|
+
- samples/elaborate/quarto/view/piece.rb
|
598
|
+
- samples/elaborate/quarto/view/selected_piece_area.rb
|
604
599
|
- samples/elaborate/stock_ticker.rb
|
605
600
|
- samples/elaborate/tetris.rb
|
606
601
|
- samples/elaborate/tetris/model/block.rb
|
data/bin/glimmer_runner.rb
DELETED