glimmer-dsl-wx 0.0.6 → 0.1.0

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -1
  3. data/LICENSE.txt +1 -1
  4. data/README.md +482 -101
  5. data/VERSION +1 -1
  6. data/bin/girb +1 -1
  7. data/bin/girb_runner.rb +1 -1
  8. data/glimmer-dsl-wx.gemspec +0 -0
  9. data/lib/glimmer/dsl/wx/about_box_expression.rb +1 -1
  10. data/lib/glimmer/dsl/wx/bind_expression.rb +16 -16
  11. data/lib/glimmer/dsl/wx/control_expression.rb +1 -1
  12. data/lib/glimmer/dsl/wx/data_binding_expression.rb +25 -25
  13. data/lib/glimmer/dsl/wx/dsl.rb +5 -7
  14. data/lib/glimmer/dsl/wx/listener_expression.rb +1 -1
  15. data/lib/glimmer/dsl/wx/observe_expression.rb +1 -1
  16. data/lib/glimmer/dsl/wx/operation_expression.rb +23 -27
  17. data/lib/glimmer/dsl/wx/property_expression.rb +10 -3
  18. data/lib/glimmer/dsl/wx/shine_data_binding_expression.rb +23 -22
  19. data/lib/glimmer/dsl/wx/sizer_addable_expression.rb +42 -0
  20. data/lib/glimmer/dsl/wx/sizer_args_expression.rb +5 -2
  21. data/lib/glimmer/dsl/wx/sizer_expression.rb +1 -1
  22. data/lib/glimmer/wx/control_proxy/frame_proxy.rb +1 -1
  23. data/lib/glimmer/wx/control_proxy/slider_proxy.rb +55 -0
  24. data/lib/glimmer/wx/control_proxy/spin_ctrl_double_proxy.rb +41 -0
  25. data/lib/glimmer/wx/control_proxy/spin_ctrl_proxy.rb +41 -0
  26. data/lib/glimmer/wx/control_proxy/text_ctrl_proxy.rb +39 -0
  27. data/lib/glimmer/wx/control_proxy.rb +3 -3
  28. data/lib/glimmer/wx/data_bindable.rb +1 -1
  29. data/lib/glimmer/wx/parent.rb +1 -1
  30. data/lib/glimmer/wx/sizer_proxy.rb +17 -1
  31. data/lib/glimmer-dsl-wx.rb +1 -1
  32. data/samples/hello/hello_button.rb +1 -1
  33. data/samples/hello/hello_button2.rb +1 -1
  34. data/samples/hello/hello_data_binding.rb +126 -0
  35. data/samples/hello/hello_sizer.rb +89 -34
  36. data/samples/hello/hello_world.rb +1 -1
  37. data/samples/hello/hello_world2.rb +1 -1
  38. data/samples/minimal/nothing.rb +1 -1
  39. metadata +20 -10
@@ -0,0 +1,126 @@
1
+ # Copyright (c) 2023-2024 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-wx'
23
+
24
+ class Donor
25
+ DONATION_AMOUNT_MIN = 0
26
+ DONATION_AMOUNT_MAX = 100
27
+ DONATION_AMOUNT_DEFAULT = 50
28
+
29
+ attr_accessor :first_name, :last_name, :donation_amount
30
+
31
+ def initialize
32
+ @last_name = @first_name = ''
33
+ @donation_amount = DONATION_AMOUNT_DEFAULT
34
+ end
35
+
36
+ def full_name
37
+ full_name_parts = [first_name, last_name]
38
+ full_name_string = full_name_parts.join(' ').strip
39
+ if full_name_string.empty?
40
+ 'Anonymous'
41
+ else
42
+ full_name_string
43
+ end
44
+ end
45
+
46
+ def summary
47
+ "#{full_name} donated $#{donation_amount}"
48
+ end
49
+ end
50
+
51
+ donor = Donor.new
52
+
53
+ include Glimmer
54
+
55
+ frame(title: 'Hello, Data-Binding!') { |window|
56
+ panel {
57
+ v_box_sizer {
58
+ h_box_sizer {
59
+ sizer_args 0, Wx::DOWN, 10
60
+
61
+ static_text(label: 'First Name:') {
62
+ sizer_args 0, Wx::RIGHT, 10
63
+ }
64
+ text_ctrl {
65
+ sizer_args 0, Wx::RIGHT, 10
66
+ # data-bind donor.first_name to text_ctrl.value bidirectionally,
67
+ # ensuring changes to either attribute update the other attribute
68
+ value <=> [donor, :first_name]
69
+ }
70
+ }
71
+
72
+ h_box_sizer {
73
+ sizer_args 0, Wx::DOWN, 10
74
+
75
+ static_text(label: 'Last Name:') {
76
+ sizer_args 0, Wx::RIGHT, 10
77
+ }
78
+ text_ctrl {
79
+ sizer_args 0, Wx::RIGHT, 10
80
+ # data-bind donor.last_name to text_ctrl.value bidirectionally,
81
+ # ensuring changes to either attribute update the other attribute
82
+ value <=> [donor, :last_name]
83
+ }
84
+ }
85
+
86
+ h_box_sizer {
87
+ sizer_args 0, Wx::DOWN, 10
88
+
89
+ static_text(label: 'Donation Amount: $') {
90
+ sizer_args 0, Wx::RIGHT, 1
91
+ }
92
+ spin_ctrl {
93
+ sizer_args 0, Wx::RIGHT, 10
94
+ range Donor::DONATION_AMOUNT_MIN, Donor::DONATION_AMOUNT_MAX
95
+ # data-bind donor.donation_amount to spin_ctrl.value bidirectionally,
96
+ # ensuring changes to either attribute update the other attribute
97
+ value <=> [donor, :donation_amount]
98
+ }
99
+ }
100
+
101
+ h_box_sizer {
102
+ sizer_args 0, Wx::DOWN, 10
103
+
104
+ slider {
105
+ sizer_args 0, Wx::RIGHT, 10
106
+ range Donor::DONATION_AMOUNT_MIN, Donor::DONATION_AMOUNT_MAX
107
+ # data-bind donor.first_name to spinner.value bidirectionally,
108
+ # ensuring changes to either attribute update the other attribute
109
+ value <=> [donor, :donation_amount]
110
+ }
111
+ }
112
+
113
+ h_box_sizer {
114
+ sizer_args 0, Wx::DOWN, 10
115
+
116
+ static_text(label: '') {
117
+ sizer_args 0, Wx::RIGHT, 10
118
+ # data-bind donor.summary to static_text.label unidirectionally,
119
+ # with computed data-binding from donor summary dependencies: first_name, last_name, and donation_amount
120
+ # ensuring changes to donor.summary or any of its dependencies update static_text.label
121
+ label <= [donor, :summary, computed_by: [:first_name, :last_name, :donation_amount]]
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2023 Andy Maleh
1
+ # Copyright (c) 2023-2024 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -26,44 +26,99 @@ include Glimmer
26
26
  frame { |main_frame|
27
27
  title 'Hello, Sizer!'
28
28
 
29
- v_box_sizer {
30
- button {
31
- sizer_args 0, Wx::DOWN, 10
32
- label 'Greeting 1'
29
+ h_box_sizer {
30
+ v_box_sizer {
31
+ sizer_args 0, Wx::RIGHT, 10
33
32
 
34
- on_button do
35
- message_dialog(
36
- "Hello",
37
- "Greeting",
38
- Wx::OK | Wx::ICON_INFORMATION
39
- ).show_modal
40
- end
41
- }
42
-
43
- button {
44
- sizer_args 0, Wx::DOWN, 10
45
- label 'Greeting 2'
33
+ button {
34
+ sizer_args 0, Wx::DOWN, 10
35
+ label 'Greeting 1'
36
+
37
+ on_button do
38
+ message_dialog(
39
+ "Hello",
40
+ "Greeting 1",
41
+ Wx::OK | Wx::ICON_INFORMATION
42
+ ).show_modal
43
+ end
44
+ }
45
+
46
+ spacer(10)
47
+
48
+ button {
49
+ sizer_args 0, Wx::DOWN, 10
50
+ label 'Greeting 2'
51
+
52
+ on_button do
53
+ message_dialog(
54
+ "Howdy",
55
+ "Greeting 2",
56
+ Wx::OK | Wx::ICON_INFORMATION
57
+ ).show_modal
58
+ end
59
+ }
60
+
61
+ spacer(10)
46
62
 
47
- on_button do
48
- message_dialog(
49
- "Howdy",
50
- "Greeting",
51
- Wx::OK | Wx::ICON_INFORMATION
52
- ).show_modal
53
- end
63
+ button {
64
+ sizer_args 0, Wx::DOWN, 10
65
+ label 'Greeting 3'
66
+
67
+ on_button do
68
+ message_dialog(
69
+ "Hi",
70
+ "Greeting 3",
71
+ Wx::OK | Wx::ICON_INFORMATION
72
+ ).show_modal
73
+ end
74
+ }
54
75
  }
55
76
 
56
- button {
57
- sizer_args 0, Wx::DOWN, 10
58
- label 'Greeting 3'
77
+ v_box_sizer {
78
+ sizer_args 0, Wx::RIGHT, 10
79
+
80
+ button {
81
+ sizer_args 0, Wx::DOWN, 10
82
+ label 'Greeting 4'
83
+
84
+ on_button do
85
+ message_dialog(
86
+ "Ciao",
87
+ "Greeting 4",
88
+ Wx::OK | Wx::ICON_INFORMATION
89
+ ).show_modal
90
+ end
91
+ }
92
+
93
+ spacer(10)
94
+
95
+ button {
96
+ sizer_args 0, Wx::DOWN, 10
97
+ label 'Greeting 5'
98
+
99
+ on_button do
100
+ message_dialog(
101
+ "Aloha",
102
+ "Greeting 5",
103
+ Wx::OK | Wx::ICON_INFORMATION
104
+ ).show_modal
105
+ end
106
+ }
107
+
108
+ spacer(10)
59
109
 
60
- on_button do
61
- message_dialog(
62
- "Aloha",
63
- "Greeting",
64
- Wx::OK | Wx::ICON_INFORMATION
65
- ).show_modal
66
- end
110
+ button {
111
+ sizer_args 0, Wx::DOWN, 10
112
+ label 'Greeting 6'
113
+
114
+ on_button do
115
+ message_dialog(
116
+ "Salut",
117
+ "Greeting 6",
118
+ Wx::OK | Wx::ICON_INFORMATION
119
+ ).show_modal
120
+ end
121
+ }
67
122
  }
68
123
  }
69
124
  }
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2023 Andy Maleh
1
+ # Copyright (c) 2023-2024 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2023 Andy Maleh
1
+ # Copyright (c) 2023-2024 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2023 Andy Maleh
1
+ # Copyright (c) 2023-2024 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-wx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-25 00:00:00.000000000 Z
11
+ date: 2024-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.7.3
19
+ version: 2.7.7
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: 2.7.3
26
+ version: 2.7.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: os
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.0.pre.beta.14
53
+ version: 1.0.0
54
54
  - - "<="
55
55
  - !ruby/object:Gem::Version
56
56
  version: 2.0.0
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.9.0.pre.beta.14
63
+ version: 1.0.0
64
64
  - - "<="
65
65
  - !ruby/object:Gem::Version
66
66
  version: 2.0.0
@@ -211,12 +211,16 @@ dependencies:
211
211
  - !ruby/object:Gem::Version
212
212
  version: 0.7.0
213
213
  description: Glimmer DSL for WX (wxWidgets Ruby Desktop Development GUI Library).
214
- This is a Glimmer GUI DSL for the WxWidgets GUI toolkit using the wxruby3 binding.
214
+ This is a Glimmer GUI DSL for the WxWidgets GUI toolkit using the latest wxruby
215
+ binding, wxruby3. It supports a declarative hierarchical minimalistic Ruby DSL with
216
+ Unidirectional/Bidirectional Data-Binding support to enable building desktop applications
217
+ the Ruby way.
215
218
  email: andy.am@gmail.com
216
219
  executables:
217
220
  - girb
218
221
  extensions: []
219
222
  extra_rdoc_files:
223
+ - CHANGELOG.md
220
224
  - LICENSE.txt
221
225
  - README.md
222
226
  files:
@@ -240,11 +244,16 @@ files:
240
244
  - lib/glimmer/dsl/wx/operation_expression.rb
241
245
  - lib/glimmer/dsl/wx/property_expression.rb
242
246
  - lib/glimmer/dsl/wx/shine_data_binding_expression.rb
247
+ - lib/glimmer/dsl/wx/sizer_addable_expression.rb
243
248
  - lib/glimmer/dsl/wx/sizer_args_expression.rb
244
249
  - lib/glimmer/dsl/wx/sizer_expression.rb
245
250
  - lib/glimmer/proc_tracker.rb
246
251
  - lib/glimmer/wx/control_proxy.rb
247
252
  - lib/glimmer/wx/control_proxy/frame_proxy.rb
253
+ - lib/glimmer/wx/control_proxy/slider_proxy.rb
254
+ - lib/glimmer/wx/control_proxy/spin_ctrl_double_proxy.rb
255
+ - lib/glimmer/wx/control_proxy/spin_ctrl_proxy.rb
256
+ - lib/glimmer/wx/control_proxy/text_ctrl_proxy.rb
248
257
  - lib/glimmer/wx/data_bindable.rb
249
258
  - lib/glimmer/wx/parent.rb
250
259
  - lib/glimmer/wx/sizer_proxy.rb
@@ -255,6 +264,7 @@ files:
255
264
  - samples/art/wxruby.png
256
265
  - samples/hello/hello_button.rb
257
266
  - samples/hello/hello_button2.rb
267
+ - samples/hello/hello_data_binding.rb
258
268
  - samples/hello/hello_sizer.rb
259
269
  - samples/hello/hello_world.rb
260
270
  - samples/hello/hello_world2.rb
@@ -267,7 +277,7 @@ homepage: http://github.com/AndyObtiva/glimmer-dsl-wx
267
277
  licenses:
268
278
  - MIT
269
279
  metadata: {}
270
- post_install_message:
280
+ post_install_message:
271
281
  rdoc_options: []
272
282
  require_paths:
273
283
  - lib
@@ -284,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
294
  version: '0'
285
295
  requirements: []
286
296
  rubygems_version: 3.3.3
287
- signing_key:
297
+ signing_key:
288
298
  specification_version: 4
289
299
  summary: Glimmer DSL for WX
290
300
  test_files: []