glimmer-dsl-tk 0.0.18 → 0.0.20

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa03163d6b0577d65e67d245b810079da4ddd6aca50cde649963e9448defe1ee
4
- data.tar.gz: 3d2cadbe0dff5e003ada1938a461785b11d5899d671d12f998b0c783983fa4dc
3
+ metadata.gz: 9b35ad7e7ce829ab16c8ded93da64a71120483982e1799afddf538ff0726d686
4
+ data.tar.gz: 6a5eec2b8c52f7df03d1f324780cc3b209b2969fe04ab64dc33efc8a1b3d05e7
5
5
  SHA512:
6
- metadata.gz: 6160cea03e0e6ed6e1511271cd780db176ba569b2774e9a304749e612ec242ad65d611dce0c475f29dfe3f9dce869bee8c660825a90fff0b3a0f5315cf7fbb47
7
- data.tar.gz: abc75b8c436416257770b9af8e38470bbf4ab53f448a281c6626fa56ef7617ffee4d551038fa9618b00d33cd63f9c8cf19f51b311406497e1ce99a54ba22d2f0
6
+ metadata.gz: 3b462e07684dc68a0c15096ea80cd5a516ac9332a1ba21f2235e85b5343b174561446d62633aa2dfc280557ff01531872fd3a033aafc1bf0eec6386b8b4d9901
7
+ data.tar.gz: 79dba86d404165e841ad94d034799bf3ba10e52fc286bdaa2af3d85b80d0ada8a075396f229e2de498fcea61274722cb8dacd762e68fb7243a9754b57e6221fe
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.20
4
+
5
+ - Hello, Root! sample
6
+ - Support `root` `width`, `height`, `x`, `y` attributes
7
+ - Support `root` attribute: `resizable`
8
+ - Support `root` attribute: `minsize`
9
+ - Support `root` attribute: `maxsize`
10
+ - Set minimum width/height on `root` (190 pixels)
11
+
3
12
  ## 0.0.18
4
13
 
5
14
  - Hello, Frame! sample
data/README.md CHANGED
@@ -1,4 +1,4 @@
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.18
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.20
2
2
  ## MRI Ruby Desktop Development GUI Library
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-tk.svg)](http://badge.fury.io/rb/glimmer-dsl-tk)
4
4
  [![Ruby](https://github.com/AndyObtiva/glimmer-dsl-tk/actions/workflows/ruby.yml/badge.svg)](https://github.com/AndyObtiva/glimmer-dsl-tk/actions/workflows/ruby.yml)
@@ -94,6 +94,7 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
94
94
  - [Hello, World!](#hello-world)
95
95
  - [Hello, Button!](#hello-button)
96
96
  - [Hello, Frame!](#hello-frame)
97
+ - [Hello, Root!](#hello-root)
97
98
  - [Hello, Notebook!](#hello-notebook)
98
99
  - [Hello, Label!](#hello-label)
99
100
  - [Hello, Message Box!](#hello-message-box)
@@ -137,7 +138,7 @@ gem install glimmer-dsl-tk
137
138
 
138
139
  Add the following to `Gemfile`:
139
140
  ```
140
- gem 'glimmer-dsl-tk', '~> 0.0.18'
141
+ gem 'glimmer-dsl-tk', '~> 0.0.20'
141
142
  ```
142
143
 
143
144
  And, then run:
@@ -645,6 +646,39 @@ Glimmer app:
645
646
 
646
647
  ![glimmer dsl tk screenshot sample hello frame](images/glimmer-dsl-tk-screenshot-sample-hello-frame.png)
647
648
 
649
+ ### Hello, Root!
650
+
651
+ Glimmer code (from [samples/hello/hello_frame.rb](samples/hello/hello_frame.rb)):
652
+
653
+ ```ruby
654
+ require 'glimmer-dsl-tk'
655
+
656
+ include Glimmer
657
+
658
+ root {
659
+ title 'Hello, Root!'
660
+ width 400
661
+ height 200
662
+ x 150
663
+ y 300
664
+ resizable true # same as `resizable true, true`, meaning cannot resize horizontally and vertically
665
+ minsize 200, 100
666
+ maxsize 600, 400
667
+ }.open
668
+ ```
669
+
670
+ Run with [glimmer-dsl-tk](https://rubygems.org/gems/glimmer-dsl-tk) gem installed:
671
+
672
+ ```
673
+ ruby -r glimmer-dsl-tk -e "require 'samples/hello/hello_root'"
674
+ ```
675
+
676
+ Alternatively, run from cloned project without [glimmer-dsl-tk](https://rubygems.org/gems/glimmer-dsl-tk) gem installed:
677
+
678
+ ```
679
+ ruby -r ./lib/glimmer-dsl-tk.rb ./samples/hello/hello_root.rb
680
+ ```
681
+
648
682
  ### Hello, Notebook!
649
683
 
650
684
  Glimmer code (from [samples/hello/hello_notebook.rb](samples/hello/hello_notebook.rb)):
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.18
1
+ 0.0.20
Binary file
@@ -27,8 +27,13 @@ module Glimmer
27
27
  #
28
28
  # Follows the Proxy Design Pattern
29
29
  class RootProxy < WidgetProxy
30
+ REGEX_GEOMETRY = /[x+-]/
31
+ DEFAULT_WIDTH = 190
32
+ DEFAULT_HEIGHT = 95
33
+
30
34
  def initialize(*args)
31
35
  @tk = ::TkRoot.new
36
+ @tk.minsize = DEFAULT_WIDTH, DEFAULT_HEIGHT
32
37
  end
33
38
 
34
39
  def post_add_content
@@ -43,19 +48,114 @@ module Glimmer
43
48
  Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Tk::RootExpression.new, keyword, *args, &block)
44
49
  end
45
50
 
51
+ def has_attribute?(attribute, *args)
52
+ %w[width height x y].include?(attribute.to_s) || super
53
+ end
54
+
46
55
  def set_attribute(attribute, *args)
47
- if attribute.to_s == 'iconphoto'
56
+ case attribute.to_s
57
+ when 'iconphoto'
48
58
  args[0..-1] = [image_argument(args)]
49
59
  super
60
+ when 'width'
61
+ @width = args.first.to_i
62
+ self.geometry = "#{args.first.to_i}x#{@height || DEFAULT_HEIGHT}#{x_sign}#{abs_x}#{y_sign}#{abs_y}"
63
+ when 'height'
64
+ @height = args.first.to_i
65
+ self.geometry = "#{@width || DEFAULT_WIDTH}x#{args.first.to_i}#{x_sign}#{abs_x}#{y_sign}#{abs_y}"
66
+ when 'x'
67
+ self.geometry = "#{@width || DEFAULT_WIDTH}x#{@height || DEFAULT_HEIGHT}#{args.first.to_i > 0 ? '+' : '-'}#{args.first.to_i.abs}#{y_sign}#{abs_y}"
68
+ when 'y'
69
+ self.geometry = "#{@width || DEFAULT_WIDTH}x#{@height || DEFAULT_HEIGHT}#{x_sign}#{abs_x}#{args.first.to_i > 0 ? '+' : '-'}#{args.first.to_i.abs}"
70
+ when 'resizable'
71
+ if args.size == 1 && !args.first.is_a?(Array)
72
+ self.resizable = [args.first]*2
73
+ else
74
+ super
75
+ end
50
76
  else
51
77
  super
52
78
  end
53
79
  end
54
-
80
+
81
+ def get_attribute(attribute)
82
+ attribute = attribute.to_s
83
+ case attribute
84
+ when 'width'
85
+ geometry.split(REGEX_GEOMETRY)[0].to_i
86
+ when 'height'
87
+ geometry.split(REGEX_GEOMETRY)[1].to_i
88
+ when 'x'
89
+ sign_number(x_sign, geometry.split(REGEX_GEOMETRY)[2].to_i)
90
+ when 'y'
91
+ sign_number(y_sign, geometry.split(REGEX_GEOMETRY)[3].to_i)
92
+ else
93
+ super
94
+ end
95
+ end
96
+
97
+ def width
98
+ get_attribute(:width)
99
+ end
100
+
101
+ def height
102
+ get_attribute(:height)
103
+ end
104
+
105
+ def x
106
+ get_attribute(:x)
107
+ end
108
+
109
+ def y
110
+ get_attribute(:y)
111
+ end
112
+
113
+ def width=(value)
114
+ set_attribute(:width, value)
115
+ end
116
+
117
+ def height=(value)
118
+ set_attribute(:height, value)
119
+ end
120
+
121
+ def x=(value)
122
+ set_attribute(:x, value)
123
+ end
124
+
125
+ def y=(value)
126
+ set_attribute(:y, value)
127
+ end
128
+
55
129
  # Starts Tk mainloop
56
130
  def start_event_loop
57
131
  ::Tk.mainloop
58
132
  end
133
+
134
+ private
135
+
136
+ def sign_number(sign, number)
137
+ "#{sign}1".to_i * number
138
+ end
139
+
140
+ def abs_x
141
+ geometry.split(REGEX_GEOMETRY)[2].to_i
142
+ end
143
+
144
+ def abs_y
145
+ geometry.split(REGEX_GEOMETRY)[3].to_i
146
+ end
147
+
148
+ def x_sign
149
+ geometry_signs[0]
150
+ end
151
+
152
+ def y_sign
153
+ geometry_signs[1]
154
+ end
155
+
156
+ def geometry_signs
157
+ geometry.chars.select {|char| char.match(/[+-]/)}
158
+ end
59
159
  end
60
160
  end
61
161
  end
@@ -153,7 +153,13 @@ module Glimmer
153
153
  if widget_custom_attribute
154
154
  widget_custom_attribute[:setter][:invoker].call(@tk, args)
155
155
  elsif tk_widget_has_attribute_setter?(attribute)
156
- @tk.send(attribute_setter(attribute), *args) unless @tk.send(attribute) == args.first
156
+ unless args.size == 1 && @tk.send(attribute) == args.first
157
+ if args.size == 1
158
+ @tk.send(attribute_setter(attribute), *args)
159
+ else
160
+ @tk.send(attribute_setter(attribute), args)
161
+ end
162
+ end
157
163
  elsif tk_widget_has_attribute_getter_setter?(attribute)
158
164
  @tk.send(attribute, *args)
159
165
  elsif has_state?(attribute)
@@ -0,0 +1,35 @@
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 'glimmer-dsl-tk'
23
+
24
+ include Glimmer
25
+
26
+ root {
27
+ title 'Hello, Root!'
28
+ width 400
29
+ height 200
30
+ x 150
31
+ y 300
32
+ resizable true # same as `resizable true, true`, meaning cannot resize horizontally and vertically
33
+ minsize 200, 100
34
+ maxsize 600, 400
35
+ }.open
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.18
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-11 00:00:00.000000000 Z
11
+ date: 2021-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 3.5.0
69
- - !ruby/object:Gem::Dependency
70
- name: rdoc
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.12'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.12'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: bundler
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,6 +128,20 @@ dependencies:
142
128
  - - '='
143
129
  - !ruby/object:Gem::Version
144
130
  version: 0.8.23
131
+ - !ruby/object:Gem::Dependency
132
+ name: json
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - '='
136
+ - !ruby/object:Gem::Version
137
+ version: 2.5.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - '='
143
+ - !ruby/object:Gem::Version
144
+ version: 2.5.1
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: simplecov
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,7 @@ files:
220
220
  - samples/hello/hello_list_single_selection.rb
221
221
  - samples/hello/hello_message_box.rb
222
222
  - samples/hello/hello_notebook.rb
223
+ - samples/hello/hello_root.rb
223
224
  - samples/hello/hello_world.rb
224
225
  - samples/hello/images/denmark.png
225
226
  - samples/hello/images/finland.png