glimmer-dsl-swt 4.17.0.0 → 4.17.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18a8ffb4de992d68ada288d1eb3fe66652b2918a94f36feb7a7307015db72f32
4
- data.tar.gz: cc71bfac3b12a57fdbc61c16c93206b360298e9ac2304419f48cf5240d9b46c8
3
+ metadata.gz: 881781afff00abf1690fde7bd43136ae6544e205b13af5c0cfb1e5120c01ab1a
4
+ data.tar.gz: 84542383d33bcff92b92bac03f30cbf2238872871feadec3d128efec75020423
5
5
  SHA512:
6
- metadata.gz: 499616144e44018c60fe0618c962a15262e0a1dd01821dc688483c5defcc8103771c57b94b540a69b0ddd2759c95ff613cae457f7072837c76eecb44d0857505
7
- data.tar.gz: 819aa6c61fbfa7c8967e57a6f99ce83a87c102913f1ad1a0ef48ba97de6bfffa859d8f6a4f7c536194539bc6e7c401f96604e3e2ad84a27573d15c5d808ed754
6
+ metadata.gz: f83516566007cb8043f91bbd2aea68395d862d0fe6795aa12b68b64324e4a2fe1d6b697786916288158738434e9799170eef1c56004e58f7d5e4e2189c80f9f0
7
+ data.tar.gz: 02dc757afa476a696006183e4b4d07022376db57abc3ae927683857c0ef5eafc8c4e4f336f78a07bbfeef18df0a8394016877c6a0db4a037b16aeea2947b148e
@@ -1,9 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ### 4.17.1.0
4
+
5
+ - Switch to Juwelier gem (from Jeweler)
6
+ - Load samples from Glimmer gems automatically (no need for configuration)
7
+ - Empty body validation in CustomWidget (and CustomShell by inheritance)
8
+ - require 'bundler/setup' in `glimmer` command if a `Gemfile` is present (disabled with GLIMMER_BUNDLER_SETUP=false env var)
9
+ - Upgrade to rvm-tui version 0.2.2
10
+
3
11
  ### 4.17.0.0
4
12
 
5
13
  - Upgrade to SWT (Standard Widget Toolkit) 4.17 and sync version with SWT going forward
6
14
  - Upgrade to Glimmer (DSL Engine) 1.0.0
15
+ - Sync version number with the SWT version number (first two numbers, leaving the last two as minor and patch)
7
16
 
8
17
  ### 0.6.9
9
18
 
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 SWT 4.17.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 SWT 4.17.1.0
2
2
  ## JRuby Desktop Development GUI Library
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
4
4
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
@@ -426,7 +426,7 @@ jgem install glimmer-dsl-swt
426
426
 
427
427
  Or this command if you want a specific version:
428
428
  ```
429
- jgem install glimmer-dsl-swt -v 4.17.0.0
429
+ jgem install glimmer-dsl-swt -v 4.17.1.0
430
430
  ```
431
431
 
432
432
  Note: Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT.
@@ -446,7 +446,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
446
446
 
447
447
  Add the following to `Gemfile`:
448
448
  ```
449
- gem 'glimmer-dsl-swt', '~> 4.17.0.0'
449
+ gem 'glimmer-dsl-swt', '~> 4.17'
450
450
  ```
451
451
 
452
452
  And, then run:
@@ -501,7 +501,7 @@ bin/glimmer sample:run[hello_world]
501
501
  Below are the full usage instructions that come up when running `glimmer` without args.
502
502
 
503
503
  ```
504
- Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17.0.0
504
+ Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17.1.0
505
505
 
506
506
  Usage: glimmer [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
507
507
 
@@ -614,7 +614,7 @@ This will run the hello_tab sample and output its code:
614
614
  ```
615
615
  $ glimmer sample:run[hello_tab]
616
616
 
617
- # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.0.0/samples/hello/hello_tab.rb
617
+ # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.1.0/samples/hello/hello_tab.rb
618
618
 
619
619
  class HelloTab
620
620
  include Glimmer
@@ -659,7 +659,7 @@ Example:
659
659
  ```
660
660
  $ glimmer sample:code[tic_tac_toe]
661
661
 
662
- # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.0.0/samples/elaborate/tic_tac_toe.rb
662
+ # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.1.0/samples/elaborate/tic_tac_toe.rb
663
663
 
664
664
  require_relative "tic_tac_toe/board"
665
665
 
@@ -720,7 +720,7 @@ TicTacToe.new.open
720
720
  # # #
721
721
 
722
722
 
723
- # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.0.0/samples/elaborate/tic_tac_toe/cell.rb
723
+ # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.1.0/samples/elaborate/tic_tac_toe/cell.rb
724
724
 
725
725
  class TicTacToe
726
726
  class Cell
@@ -753,7 +753,7 @@ end
753
753
  # # #
754
754
 
755
755
 
756
- # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.0.0/samples/elaborate/tic_tac_toe/board.rb
756
+ # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.1.0/samples/elaborate/tic_tac_toe/board.rb
757
757
 
758
758
  require_relative 'cell'
759
759
 
@@ -1135,7 +1135,7 @@ Output:
1135
1135
 
1136
1136
  Name Gem Version Author Description
1137
1137
 
1138
- Video glimmer-cw-video 0.1.3 Andy Maleh Glimmer Custom Widget - Video
1138
+ Video glimmer-cw-video 1.0.0 Andy Maleh Glimmer Custom Widget - Video
1139
1139
 
1140
1140
  ```
1141
1141
 
@@ -1163,7 +1163,7 @@ Output:
1163
1163
 
1164
1164
  Css glimmer-dsl-css 0.2.0 AndyMaleh Glimmer DSL for CSS
1165
1165
  Opal glimmer-dsl-opal 0.1.0 AndyMaleh Glimmer DSL for Opal
1166
- Swt glimmer-dsl-swt 4.17.0.0 AndyMaleh Glimmer DSL for SWT
1166
+ Swt glimmer-dsl-swt 4.17.1.0 AndyMaleh Glimmer DSL for SWT
1167
1167
  Tk glimmer-dsl-tk 0.0.5 AndyMaleh Glimmer DSL for Tk
1168
1168
  Xml glimmer-dsl-xml 0.2.0 AndyMaleh Glimmer DSL for XML
1169
1169
  ```
@@ -3159,6 +3159,23 @@ shell {
3159
3159
  }.open
3160
3160
  ```
3161
3161
 
3162
+ ##### SWT Browser Style Options
3163
+
3164
+ The `browser` widget can use a particular desktop browser by setting the SWT Style to:
3165
+ - `:webkit`: use the Webkit browser engine
3166
+ - `:chromium`: use the Chromium browser engine
3167
+
3168
+ Example using the Chromium browser (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
3169
+
3170
+ ```ruby
3171
+ shell {
3172
+ minimum_size 1024, 860
3173
+ browser(:chromium) {
3174
+ url 'http://brightonresort.com/about'
3175
+ }
3176
+ }.open
3177
+ ```
3178
+
3162
3179
  This relies on Glimmer's [Multi-DSL Support](#multi-dsl-support) for building the HTML text using [Glimmer XML DSL](https://github.com/AndyObtiva/glimmer-dsl-xml).
3163
3180
 
3164
3181
  ## Glimmer Configuration
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.17.0.0
1
+ 4.17.1.0
@@ -21,6 +21,10 @@
21
21
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
+ if File.exist?(File.expand_path('./Gemfile'))
25
+ require 'bundler/setup' unless ENV['GLIMMER_BUNDLER_SETUP'].to_s.downcase == 'false'
26
+ end
27
+
24
28
  require_relative '../lib/glimmer/launcher'
25
29
 
26
30
  Glimmer::Launcher.new(ARGV).launch
@@ -0,0 +1,187 @@
1
+ # Generated by juwelier
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: glimmer-dsl-swt 4.17.1.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "glimmer-dsl-swt".freeze
9
+ s.version = "4.17.1.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["AndyMaleh".freeze]
14
+ s.date = "2020-09-24"
15
+ s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI Library)".freeze
16
+ s.email = "andy.am@gmail.com".freeze
17
+ s.executables = ["glimmer".freeze, "girb".freeze]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.md"
21
+ ]
22
+ s.files = [
23
+ "CHANGELOG.md",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "RUBY_VERSION",
27
+ "VERSION",
28
+ "bin/girb",
29
+ "bin/girb_runner.rb",
30
+ "bin/glimmer",
31
+ "glimmer-dsl-swt.gemspec",
32
+ "icons/scaffold_app.icns",
33
+ "icons/scaffold_app.ico",
34
+ "icons/scaffold_app.png",
35
+ "lib/ext/glimmer.rb",
36
+ "lib/ext/glimmer/config.rb",
37
+ "lib/glimmer-dsl-swt.rb",
38
+ "lib/glimmer/Rakefile",
39
+ "lib/glimmer/data_binding/list_selection_binding.rb",
40
+ "lib/glimmer/data_binding/observable_widget.rb",
41
+ "lib/glimmer/data_binding/shine.rb",
42
+ "lib/glimmer/data_binding/table_items_binding.rb",
43
+ "lib/glimmer/data_binding/tree_items_binding.rb",
44
+ "lib/glimmer/data_binding/widget_binding.rb",
45
+ "lib/glimmer/dsl/swt/async_exec_expression.rb",
46
+ "lib/glimmer/dsl/swt/bind_expression.rb",
47
+ "lib/glimmer/dsl/swt/block_property_expression.rb",
48
+ "lib/glimmer/dsl/swt/color_expression.rb",
49
+ "lib/glimmer/dsl/swt/column_properties_expression.rb",
50
+ "lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb",
51
+ "lib/glimmer/dsl/swt/cursor_expression.rb",
52
+ "lib/glimmer/dsl/swt/custom_widget_expression.rb",
53
+ "lib/glimmer/dsl/swt/data_binding_expression.rb",
54
+ "lib/glimmer/dsl/swt/dialog_expression.rb",
55
+ "lib/glimmer/dsl/swt/display_expression.rb",
56
+ "lib/glimmer/dsl/swt/dnd_expression.rb",
57
+ "lib/glimmer/dsl/swt/dsl.rb",
58
+ "lib/glimmer/dsl/swt/exec_expression.rb",
59
+ "lib/glimmer/dsl/swt/font_expression.rb",
60
+ "lib/glimmer/dsl/swt/image_expression.rb",
61
+ "lib/glimmer/dsl/swt/layout_data_expression.rb",
62
+ "lib/glimmer/dsl/swt/layout_expression.rb",
63
+ "lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb",
64
+ "lib/glimmer/dsl/swt/menu_bar_expression.rb",
65
+ "lib/glimmer/dsl/swt/menu_expression.rb",
66
+ "lib/glimmer/dsl/swt/message_box_expression.rb",
67
+ "lib/glimmer/dsl/swt/observe_expression.rb",
68
+ "lib/glimmer/dsl/swt/property_expression.rb",
69
+ "lib/glimmer/dsl/swt/rgb_expression.rb",
70
+ "lib/glimmer/dsl/swt/rgba_expression.rb",
71
+ "lib/glimmer/dsl/swt/shell_expression.rb",
72
+ "lib/glimmer/dsl/swt/swt_expression.rb",
73
+ "lib/glimmer/dsl/swt/sync_exec_expression.rb",
74
+ "lib/glimmer/dsl/swt/tab_item_expression.rb",
75
+ "lib/glimmer/dsl/swt/table_items_data_binding_expression.rb",
76
+ "lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb",
77
+ "lib/glimmer/dsl/swt/tree_properties_expression.rb",
78
+ "lib/glimmer/dsl/swt/widget_expression.rb",
79
+ "lib/glimmer/dsl/swt/widget_listener_expression.rb",
80
+ "lib/glimmer/launcher.rb",
81
+ "lib/glimmer/package.rb",
82
+ "lib/glimmer/rake_task.rb",
83
+ "lib/glimmer/rake_task/list.rb",
84
+ "lib/glimmer/rake_task/sample.rb",
85
+ "lib/glimmer/scaffold.rb",
86
+ "lib/glimmer/swt/color_proxy.rb",
87
+ "lib/glimmer/swt/cursor_proxy.rb",
88
+ "lib/glimmer/swt/display_proxy.rb",
89
+ "lib/glimmer/swt/dnd_proxy.rb",
90
+ "lib/glimmer/swt/font_proxy.rb",
91
+ "lib/glimmer/swt/image_proxy.rb",
92
+ "lib/glimmer/swt/layout_data_proxy.rb",
93
+ "lib/glimmer/swt/layout_proxy.rb",
94
+ "lib/glimmer/swt/menu_proxy.rb",
95
+ "lib/glimmer/swt/message_box_proxy.rb",
96
+ "lib/glimmer/swt/packages.rb",
97
+ "lib/glimmer/swt/scrolled_composite_proxy.rb",
98
+ "lib/glimmer/swt/shell_proxy.rb",
99
+ "lib/glimmer/swt/style_constantizable.rb",
100
+ "lib/glimmer/swt/swt_proxy.rb",
101
+ "lib/glimmer/swt/tab_item_proxy.rb",
102
+ "lib/glimmer/swt/table_column_proxy.rb",
103
+ "lib/glimmer/swt/table_proxy.rb",
104
+ "lib/glimmer/swt/tree_proxy.rb",
105
+ "lib/glimmer/swt/widget_listener_proxy.rb",
106
+ "lib/glimmer/swt/widget_proxy.rb",
107
+ "lib/glimmer/ui/custom_shell.rb",
108
+ "lib/glimmer/ui/custom_widget.rb",
109
+ "lib/glimmer/util/proc_tracker.rb",
110
+ "samples/elaborate/contact_manager.rb",
111
+ "samples/elaborate/contact_manager/contact.rb",
112
+ "samples/elaborate/contact_manager/contact_manager_presenter.rb",
113
+ "samples/elaborate/contact_manager/contact_repository.rb",
114
+ "samples/elaborate/login.rb",
115
+ "samples/elaborate/tic_tac_toe.rb",
116
+ "samples/elaborate/tic_tac_toe/board.rb",
117
+ "samples/elaborate/tic_tac_toe/cell.rb",
118
+ "samples/elaborate/user_profile.rb",
119
+ "samples/hello/hello_browser.rb",
120
+ "samples/hello/hello_combo.rb",
121
+ "samples/hello/hello_computed.rb",
122
+ "samples/hello/hello_computed/contact.rb",
123
+ "samples/hello/hello_drag_and_drop.rb",
124
+ "samples/hello/hello_list_multi_selection.rb",
125
+ "samples/hello/hello_list_single_selection.rb",
126
+ "samples/hello/hello_menu_bar.rb",
127
+ "samples/hello/hello_message_box.rb",
128
+ "samples/hello/hello_pop_up_context_menu.rb",
129
+ "samples/hello/hello_tab.rb",
130
+ "samples/hello/hello_world.rb",
131
+ "vendor/swt/linux/swt.jar",
132
+ "vendor/swt/mac/swt.jar",
133
+ "vendor/swt/windows/swt.jar"
134
+ ]
135
+ s.homepage = "http://github.com/AndyObtiva/glimmer-dsl-swt".freeze
136
+ s.licenses = ["MIT".freeze]
137
+ s.required_ruby_version = Gem::Requirement.new(">= 2.5.3".freeze)
138
+ s.rubygems_version = "3.1.4".freeze
139
+ s.summary = "Glimmer DSL for SWT".freeze
140
+
141
+ if s.respond_to? :specification_version then
142
+ s.specification_version = 4
143
+ end
144
+
145
+ if s.respond_to? :add_runtime_dependency then
146
+ s.add_runtime_dependency(%q<glimmer>.freeze, ["~> 1.0.0"])
147
+ s.add_runtime_dependency(%q<super_module>.freeze, ["~> 1.4.1"])
148
+ s.add_runtime_dependency(%q<nested_inherited_jruby_include_package>.freeze, ["~> 0.3.0"])
149
+ s.add_runtime_dependency(%q<puts_debuggerer>.freeze, ["~> 0.10.1"])
150
+ s.add_runtime_dependency(%q<rake-tui>.freeze, [">= 0.2.2", "< 2.0.0"])
151
+ s.add_runtime_dependency(%q<git-glimmer>.freeze, ["= 1.7.0"])
152
+ s.add_runtime_dependency(%q<juwelier>.freeze, [">= 2.4.9", "< 3.0.0"])
153
+ s.add_runtime_dependency(%q<logging>.freeze, [">= 2.3.0", "< 3.0.0"])
154
+ s.add_runtime_dependency(%q<os>.freeze, [">= 1.0.0", "< 2.0.0"])
155
+ s.add_runtime_dependency(%q<rake>.freeze, [">= 10.1.0", "< 14.0.0"])
156
+ s.add_runtime_dependency(%q<rdoc>.freeze, [">= 6.2.1", "< 7.0.0"])
157
+ s.add_runtime_dependency(%q<text-table>.freeze, [">= 1.2.4", "< 2.0.0"])
158
+ s.add_runtime_dependency(%q<tty-markdown>.freeze, [">= 0.6.0", "< 2.0.0"])
159
+ s.add_runtime_dependency(%q<warbler>.freeze, [">= 2.0.5", "< 3.0.0"])
160
+ s.add_development_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
161
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
162
+ s.add_development_dependency(%q<coveralls>.freeze, ["= 0.8.23"])
163
+ s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.16.1"])
164
+ s.add_development_dependency(%q<simplecov-lcov>.freeze, ["~> 0.7.0"])
165
+ else
166
+ s.add_dependency(%q<glimmer>.freeze, ["~> 1.0.0"])
167
+ s.add_dependency(%q<super_module>.freeze, ["~> 1.4.1"])
168
+ s.add_dependency(%q<nested_inherited_jruby_include_package>.freeze, ["~> 0.3.0"])
169
+ s.add_dependency(%q<puts_debuggerer>.freeze, ["~> 0.10.1"])
170
+ s.add_dependency(%q<rake-tui>.freeze, [">= 0.2.2", "< 2.0.0"])
171
+ s.add_dependency(%q<git-glimmer>.freeze, ["= 1.7.0"])
172
+ s.add_dependency(%q<juwelier>.freeze, [">= 2.4.9", "< 3.0.0"])
173
+ s.add_dependency(%q<logging>.freeze, [">= 2.3.0", "< 3.0.0"])
174
+ s.add_dependency(%q<os>.freeze, [">= 1.0.0", "< 2.0.0"])
175
+ s.add_dependency(%q<rake>.freeze, [">= 10.1.0", "< 14.0.0"])
176
+ s.add_dependency(%q<rdoc>.freeze, [">= 6.2.1", "< 7.0.0"])
177
+ s.add_dependency(%q<text-table>.freeze, [">= 1.2.4", "< 2.0.0"])
178
+ s.add_dependency(%q<tty-markdown>.freeze, [">= 0.6.0", "< 2.0.0"])
179
+ s.add_dependency(%q<warbler>.freeze, [">= 2.0.5", "< 3.0.0"])
180
+ s.add_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
181
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
182
+ s.add_dependency(%q<coveralls>.freeze, ["= 0.8.23"])
183
+ s.add_dependency(%q<simplecov>.freeze, ["~> 0.16.1"])
184
+ s.add_dependency(%q<simplecov-lcov>.freeze, ["~> 0.7.0"])
185
+ end
186
+ end
187
+
@@ -33,11 +33,6 @@ module Glimmer
33
33
  'org.eclipse.swt.dnd',
34
34
  ]
35
35
 
36
- # This may be configured with extra sample directories from custom widget/shell gems
37
- # following the convention of a `samples/subdirectory` where subdirectory is the
38
- # custom widget/shell name or something representative of a group of samples (e.g. c_date_time).
39
- SAMPLE_DIRECTORIES = []
40
-
41
36
  class << self
42
37
  # Tells Glimmer to import SWT packages into including class (default: true)
43
38
  def import_swt_packages=(value)
@@ -66,15 +66,11 @@ module Glimmer
66
66
  def swt_jar_file
67
67
  @swt_jar_file ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar'))
68
68
  end
69
-
69
+
70
70
  def jruby_os_specific_options
71
71
  OS.mac? ? "-J-XstartOnFirstThread" : ""
72
72
  end
73
73
 
74
- def jruby_swt_options
75
- "#{jruby_os_specific_options} -J-classpath \"#{swt_jar_file}\""
76
- end
77
-
78
74
  def glimmer_lib
79
75
  @@mutex.synchronize do
80
76
  unless @glimmer_lib
@@ -26,86 +26,27 @@ require_relative 'package'
26
26
  ENV['GLIMMER_LOGGER_ENABLED'] = 'false'
27
27
  require_relative '../ext/glimmer/config.rb'
28
28
 
29
- Glimmer::Config::SAMPLE_DIRECTORIES << File.expand_path('../../../samples/hello', __FILE__)
30
- Glimmer::Config::SAMPLE_DIRECTORIES << File.expand_path('../../../samples/elaborate', __FILE__)
29
+ require 'puts_debuggerer' if ("#{ENV['pd']}#{ENV['PD']}").to_s.downcase.include?('true')
31
30
 
32
31
  namespace :glimmer do
33
32
  namespace :sample do
34
- task :requires do
35
- require 'text-table'
36
- require 'facets/string/titlecase'
37
- require 'facets/string/underscore'
38
-
39
- require_relative 'launcher'
33
+ task :requires do
34
+ require_relative 'rake_task/sample'
40
35
  end
41
36
 
42
- task :glimmer_gems do
43
- glimmer_cw_gems = Gem.find_latest_files('glimmer-cw-*')
44
- glimmer_cs_gems = Gem.find_latest_files('glimmer-cs-*')
45
- glimmer_dsl_gems = Gem.find_latest_files('glimmer-dsl-*')
46
- glimmer_gem_lib_files = glimmer_cw_gems + glimmer_cs_gems + glimmer_dsl_gems
47
- glimmer_gem_lib_files = glimmer_gem_lib_files.map {|file| file.sub(/\.rb$/, '')}.uniq.reject {|file| file.include?('glimmer-cs-gladiator')}
48
- glimmer_gem_lib_files.each {|file| require file}
49
- end
50
-
51
37
  desc 'Runs a Glimmer internal sample [included in gem]. If no name is supplied, it runs all samples.'
52
- task :run, [:name] => [:requires, :glimmer_gems] do |t, args|
53
- name = args[:name]
54
- name = name.underscore.downcase unless name.nil?
55
- samples = Glimmer::Config::SAMPLE_DIRECTORIES.map {|dir| Dir.glob(File.join(dir, '*.rb'))}.reduce(:+).sort
56
- samples = samples.select {|path| path.include?("#{name}.rb")} unless name.nil?
57
- Rake::Task['glimmer:sample:code'].invoke(name) if samples.size == 1
58
- Glimmer::Launcher.new(samples << '--quiet=false').launch
38
+ task :run, [:name] => [:requires] do |t, args|
39
+ Glimmer::RakeTask::Sample.run(args[:name])
59
40
  end
60
41
 
61
42
  desc 'Lists Glimmer internal samples [included in gem]. Filters by query if specified (query is optional)'
62
- task :list, [:query] => [:requires, :glimmer_gems] do |t, args|
63
- Glimmer::Config::SAMPLE_DIRECTORIES.each do |dir|
64
- sample_group_name = File.basename(dir)
65
- human_sample_group_name = sample_group_name.underscore.titlecase
66
- array_of_arrays = Dir.glob(File.join(dir, '*.rb')).map do |path|
67
- File.basename(path, '.rb')
68
- end.select do |path|
69
- args[:query].nil? || path.include?(args[:query])
70
- end.map do |path|
71
- [path, path.underscore.titlecase, "#{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run[#{path}]"]
72
- end.sort
73
- if array_of_arrays.empty?
74
- puts "No Glimmer #{human_sample_group_name} Samples match the query."
75
- else
76
- puts
77
- puts " Glimmer #{human_sample_group_name} Samples:"
78
- puts Text::Table.new(
79
- :head => %w[Name Description Run],
80
- :rows => array_of_arrays,
81
- :horizontal_padding => 1,
82
- :vertical_boundary => ' ',
83
- :horizontal_boundary => ' ',
84
- :boundary_intersection => ' '
85
- )
86
- end
87
- end
43
+ task :list, [:query] => [:requires] do |t, args|
44
+ Glimmer::RakeTask::Sample.list(args[:query])
88
45
  end
89
46
 
90
47
  desc 'Outputs code for a Glimmer internal sample [included in gem] (name is required)'
91
- task :code, [:name] => [:requires, :glimmer_gems] do |t, args|
92
- require 'tty-markdown' unless OS.windows?
93
- samples = Glimmer::Config::SAMPLE_DIRECTORIES.map {|dir| Dir.glob(File.join(dir, '*.rb'))}.reduce(:+).sort
94
- sample = samples.detect {|path| path.include?("#{args[:name].to_s.underscore.downcase}.rb")}
95
- sample_additional_files = Dir.glob(File.join(sample.sub('.rb', ''), '**', '*.rb'))
96
- code = ([sample] + sample_additional_files).map do |file|
97
- <<~RUBY
98
-
99
- # #{file}
100
-
101
- #{File.read(file)}
102
-
103
- # # #
104
-
105
- RUBY
106
- end.join("\n")
107
- code = TTY::Markdown.parse("```ruby\n#{code}\n```") unless OS.windows?
108
- puts code
48
+ task :code, [:name] => [:requires] do |t, args|
49
+ Glimmer::RakeTask::Sample.code(args[:name])
109
50
  end
110
51
 
111
52
  end
@@ -0,0 +1,115 @@
1
+ # Copyright (c) 2007-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 'text-table'
23
+ require 'facets/string/titlecase'
24
+ require 'facets/string/underscore'
25
+
26
+ require_relative '../launcher'
27
+
28
+ module Glimmer
29
+ module RakeTask
30
+ # Lists Glimmer related gems to use in rake_task.rb
31
+ class Sample
32
+ class << self
33
+ def glimmer_gems(glimmer_gem_type = '*')
34
+ Gem.find_latest_files("glimmer-#{glimmer_gem_type}-*")
35
+ end
36
+
37
+ def glimmer_gem_libs(glimmer_gem_type = '*')
38
+ glimmer_gems(glimmer_gem_type).map {|file| file.sub(/\.rb$/, '')}.uniq.reject {|file| file.include?('glimmer-cs-gladiator')}
39
+ end
40
+
41
+ def glimmer_gem_samples(glimmer_gem_type = '*')
42
+ sample_directories = glimmer_gems(glimmer_gem_type).map do |lib|
43
+ File.dirname(File.dirname(lib))
44
+ end.select do |gem|
45
+ Dir.exist?(File.join(gem, 'samples'))
46
+ end.map do |gem|
47
+ Dir.glob(File.join(gem, 'samples', '*')).select {|file_or_dir| Dir.exist?(file_or_dir)}
48
+ end.flatten.uniq.reverse
49
+ if Dir.exist?('samples')
50
+ Dir.glob(File.join('samples', '*')).to_a.reverse.each do |dir|
51
+ sample_directories << dir if Dir.exist?(dir)
52
+ end
53
+ end
54
+ sample_directories.uniq {|dir| File.basename(dir)}
55
+ end
56
+
57
+ def run(name)
58
+ name = name.underscore.downcase unless name.nil?
59
+ samples = glimmer_gem_samples.map {|dir| Dir.glob(File.join(dir, '*.rb'))}.reduce(:+).sort
60
+ samples = samples.select {|path| path.include?("#{name}.rb")} unless name.nil?
61
+ Rake::Task['glimmer:sample:code'].invoke(name) if samples.size == 1
62
+ Glimmer::Launcher.new(samples << '--quiet=false').launch
63
+ end
64
+
65
+ def list(query)
66
+ glimmer_gem_samples.each do |dir|
67
+ sample_group_name = File.basename(dir)
68
+ human_sample_group_name = sample_group_name.underscore.titlecase
69
+ array_of_arrays = Dir.glob(File.join(dir, '*.rb')).map do |path|
70
+ File.basename(path, '.rb')
71
+ end.select do |path|
72
+ query.nil? || path.include?(query)
73
+ end.map do |path|
74
+ [path, path.underscore.titlecase, "#{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run[#{path}]"]
75
+ end.sort
76
+ if array_of_arrays.empty?
77
+ puts "No Glimmer #{human_sample_group_name} Samples match the query."
78
+ else
79
+ puts
80
+ puts " Glimmer #{human_sample_group_name} Samples:"
81
+ puts Text::Table.new(
82
+ :head => %w[Name Description Run],
83
+ :rows => array_of_arrays,
84
+ :horizontal_padding => 1,
85
+ :vertical_boundary => ' ',
86
+ :horizontal_boundary => ' ',
87
+ :boundary_intersection => ' '
88
+ )
89
+ end
90
+ end
91
+ end
92
+
93
+ def code(name)
94
+ require 'tty-markdown' unless OS.windows?
95
+ samples = glimmer_gem_samples.map {|dir| Dir.glob(File.join(dir, '*.rb'))}.reduce(:+).sort
96
+ sample = samples.detect {|path| path.include?("#{name.to_s.underscore.downcase}.rb")}
97
+ sample_additional_files = Dir.glob(File.join(sample.sub('.rb', ''), '**', '*.rb'))
98
+ code = ([sample] + sample_additional_files).map do |file|
99
+ <<~RUBY
100
+
101
+ # #{file}
102
+
103
+ #{File.read(file)}
104
+
105
+ # # #
106
+
107
+ RUBY
108
+ end.join("\n")
109
+ code = TTY::Markdown.parse("```ruby\n#{code}\n```") unless OS.windows?
110
+ puts code
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -112,7 +112,7 @@ class Scaffold
112
112
  group :development do
113
113
  gem 'rspec', '~> 3.5.0'
114
114
  gem 'git-glimmer', '1.7.0'
115
- gem 'jeweler', '2.3.9'
115
+ gem 'juwelier', '2.4.9'
116
116
  gem 'simplecov', '>= 0'
117
117
  end
118
118
  MULTI_LINE_STRING
@@ -135,7 +135,7 @@ class Scaffold
135
135
  def app(app_name)
136
136
  gem_name = file_name(app_name)
137
137
  gem_summary = human_name(app_name)
138
- system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
138
+ system "jruby -r git-glimmer -S juwelier --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
139
139
  cd gem_name
140
140
  rm_rf 'lib'
141
141
  write '.gitignore', GITIGNORE
@@ -216,7 +216,7 @@ class Scaffold
216
216
  return puts('Namespace is required! Usage: glimmer scaffold:gem:customshell[name,namespace]') unless `git config --get github.user`.to_s.strip == 'AndyObtiva'
217
217
  namespace = 'glimmer'
218
218
  end
219
- system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
219
+ system "jruby -r git-glimmer -S juwelier --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
220
220
  cd gem_name
221
221
  write '.gitignore', GITIGNORE
222
222
  write '.ruby-version', RUBY_VERSION
@@ -277,7 +277,7 @@ class Scaffold
277
277
  else
278
278
  namespace = 'glimmer'
279
279
  end
280
- system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
280
+ system "jruby -r git-glimmer -S juwelier --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
281
281
  cd gem_name
282
282
  write '.gitignore', GITIGNORE
283
283
  write '.ruby-version', RUBY_VERSION
@@ -422,7 +422,7 @@ class Scaffold
422
422
  lines.insert(gem_files_line_index, " gem.files = Dir['VERSION', 'LICENSE.txt', 'lib/**/*']")
423
423
  end
424
424
  spec_pattern_line_index = lines.index(lines.detect {|l| l.include?('spec.pattern =') })
425
- lines.insert(spec_pattern_line_index+1, " spec.ruby_opts = [Glimmer::Launcher.jruby_swt_options]")
425
+ lines.insert(spec_pattern_line_index+1, " spec.ruby_opts = [Glimmer::Launcher.jruby_os_specific_options]")
426
426
  lines << "\nrequire 'glimmer/rake_task'\n"
427
427
  file_content = lines.join("\n")
428
428
  if custom_shell_name
@@ -153,6 +153,7 @@ module Glimmer
153
153
  body_block = self.class.instance_variable_get("@body_block")
154
154
  raise Glimmer::Error, 'Invalid custom widget for having no body! Please define body block!' if body_block.nil?
155
155
  @body_root = instance_exec(&body_block)
156
+ raise Glimmer::Error, 'Invalid custom widget for having an empty body! Please fill body block!' if @body_root.nil?
156
157
  @swt_widget = @body_root.swt_widget
157
158
  @swt_widget.set_data('custom_widget', self)
158
159
  execute_hooks('after_body')
@@ -24,6 +24,6 @@ include Glimmer
24
24
  shell {
25
25
  minimum_size 1024, 860
26
26
  browser {
27
- url 'http://brightonresort.com/about'
27
+ url 'https://brightonresort.com/about'
28
28
  }
29
29
  }.open
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.17.0.0
4
+ version: 4.17.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-18 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -17,8 +17,8 @@ dependencies:
17
17
  - !ruby/object:Gem::Version
18
18
  version: 1.0.0
19
19
  name: glimmer
20
- type: :runtime
21
20
  prerelease: false
21
+ type: :runtime
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
@@ -31,8 +31,8 @@ dependencies:
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.4.1
33
33
  name: super_module
34
- type: :runtime
35
34
  prerelease: false
35
+ type: :runtime
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
@@ -45,8 +45,8 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: 0.3.0
47
47
  name: nested_inherited_jruby_include_package
48
- type: :runtime
49
48
  prerelease: false
49
+ type: :runtime
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
@@ -59,8 +59,8 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: 0.10.1
61
61
  name: puts_debuggerer
62
- type: :runtime
63
62
  prerelease: false
63
+ type: :runtime
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
@@ -71,15 +71,21 @@ dependencies:
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 0.2.1
74
+ version: 0.2.2
75
+ - - "<"
76
+ - !ruby/object:Gem::Version
77
+ version: 2.0.0
75
78
  name: rake-tui
76
- type: :runtime
77
79
  prerelease: false
80
+ type: :runtime
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
83
  - - ">="
81
84
  - !ruby/object:Gem::Version
82
- version: 0.2.1
85
+ version: 0.2.2
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: 2.0.0
83
89
  - !ruby/object:Gem::Dependency
84
90
  requirement: !ruby/object:Gem::Requirement
85
91
  requirements:
@@ -87,8 +93,8 @@ dependencies:
87
93
  - !ruby/object:Gem::Version
88
94
  version: 1.7.0
89
95
  name: git-glimmer
90
- type: :runtime
91
96
  prerelease: false
97
+ type: :runtime
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - '='
@@ -99,18 +105,18 @@ dependencies:
99
105
  requirements:
100
106
  - - ">="
101
107
  - !ruby/object:Gem::Version
102
- version: 2.3.9
108
+ version: 2.4.9
103
109
  - - "<"
104
110
  - !ruby/object:Gem::Version
105
111
  version: 3.0.0
106
- name: jeweler
107
- type: :runtime
112
+ name: juwelier
108
113
  prerelease: false
114
+ type: :runtime
109
115
  version_requirements: !ruby/object:Gem::Requirement
110
116
  requirements:
111
117
  - - ">="
112
118
  - !ruby/object:Gem::Version
113
- version: 2.3.9
119
+ version: 2.4.9
114
120
  - - "<"
115
121
  - !ruby/object:Gem::Version
116
122
  version: 3.0.0
@@ -124,8 +130,8 @@ dependencies:
124
130
  - !ruby/object:Gem::Version
125
131
  version: 3.0.0
126
132
  name: logging
127
- type: :runtime
128
133
  prerelease: false
134
+ type: :runtime
129
135
  version_requirements: !ruby/object:Gem::Requirement
130
136
  requirements:
131
137
  - - ">="
@@ -144,8 +150,8 @@ dependencies:
144
150
  - !ruby/object:Gem::Version
145
151
  version: 2.0.0
146
152
  name: os
147
- type: :runtime
148
153
  prerelease: false
154
+ type: :runtime
149
155
  version_requirements: !ruby/object:Gem::Requirement
150
156
  requirements:
151
157
  - - ">="
@@ -164,8 +170,8 @@ dependencies:
164
170
  - !ruby/object:Gem::Version
165
171
  version: 14.0.0
166
172
  name: rake
167
- type: :runtime
168
173
  prerelease: false
174
+ type: :runtime
169
175
  version_requirements: !ruby/object:Gem::Requirement
170
176
  requirements:
171
177
  - - ">="
@@ -184,8 +190,8 @@ dependencies:
184
190
  - !ruby/object:Gem::Version
185
191
  version: 7.0.0
186
192
  name: rdoc
187
- type: :runtime
188
193
  prerelease: false
194
+ type: :runtime
189
195
  version_requirements: !ruby/object:Gem::Requirement
190
196
  requirements:
191
197
  - - ">="
@@ -204,8 +210,8 @@ dependencies:
204
210
  - !ruby/object:Gem::Version
205
211
  version: 2.0.0
206
212
  name: text-table
207
- type: :runtime
208
213
  prerelease: false
214
+ type: :runtime
209
215
  version_requirements: !ruby/object:Gem::Requirement
210
216
  requirements:
211
217
  - - ">="
@@ -219,18 +225,18 @@ dependencies:
219
225
  requirements:
220
226
  - - ">="
221
227
  - !ruby/object:Gem::Version
222
- version: 0.7.0
228
+ version: 0.6.0
223
229
  - - "<"
224
230
  - !ruby/object:Gem::Version
225
231
  version: 2.0.0
226
232
  name: tty-markdown
227
- type: :runtime
228
233
  prerelease: false
234
+ type: :runtime
229
235
  version_requirements: !ruby/object:Gem::Requirement
230
236
  requirements:
231
237
  - - ">="
232
238
  - !ruby/object:Gem::Version
233
- version: 0.7.0
239
+ version: 0.6.0
234
240
  - - "<"
235
241
  - !ruby/object:Gem::Version
236
242
  version: 2.0.0
@@ -244,8 +250,8 @@ dependencies:
244
250
  - !ruby/object:Gem::Version
245
251
  version: 3.0.0
246
252
  name: warbler
247
- type: :runtime
248
253
  prerelease: false
254
+ type: :runtime
249
255
  version_requirements: !ruby/object:Gem::Requirement
250
256
  requirements:
251
257
  - - ">="
@@ -261,8 +267,8 @@ dependencies:
261
267
  - !ruby/object:Gem::Version
262
268
  version: 3.5.0
263
269
  name: rspec-mocks
264
- type: :development
265
270
  prerelease: false
271
+ type: :development
266
272
  version_requirements: !ruby/object:Gem::Requirement
267
273
  requirements:
268
274
  - - "~>"
@@ -275,8 +281,8 @@ dependencies:
275
281
  - !ruby/object:Gem::Version
276
282
  version: 3.5.0
277
283
  name: rspec
278
- type: :development
279
284
  prerelease: false
285
+ type: :development
280
286
  version_requirements: !ruby/object:Gem::Requirement
281
287
  requirements:
282
288
  - - "~>"
@@ -289,8 +295,8 @@ dependencies:
289
295
  - !ruby/object:Gem::Version
290
296
  version: 0.8.23
291
297
  name: coveralls
292
- type: :development
293
298
  prerelease: false
299
+ type: :development
294
300
  version_requirements: !ruby/object:Gem::Requirement
295
301
  requirements:
296
302
  - - '='
@@ -303,8 +309,8 @@ dependencies:
303
309
  - !ruby/object:Gem::Version
304
310
  version: 0.16.1
305
311
  name: simplecov
306
- type: :development
307
312
  prerelease: false
313
+ type: :development
308
314
  version_requirements: !ruby/object:Gem::Requirement
309
315
  requirements:
310
316
  - - "~>"
@@ -317,8 +323,8 @@ dependencies:
317
323
  - !ruby/object:Gem::Version
318
324
  version: 0.7.0
319
325
  name: simplecov-lcov
320
- type: :development
321
326
  prerelease: false
327
+ type: :development
322
328
  version_requirements: !ruby/object:Gem::Requirement
323
329
  requirements:
324
330
  - - "~>"
@@ -342,6 +348,7 @@ files:
342
348
  - bin/girb
343
349
  - bin/girb_runner.rb
344
350
  - bin/glimmer
351
+ - glimmer-dsl-swt.gemspec
345
352
  - icons/scaffold_app.icns
346
353
  - icons/scaffold_app.ico
347
354
  - icons/scaffold_app.png
@@ -394,6 +401,7 @@ files:
394
401
  - lib/glimmer/package.rb
395
402
  - lib/glimmer/rake_task.rb
396
403
  - lib/glimmer/rake_task/list.rb
404
+ - lib/glimmer/rake_task/sample.rb
397
405
  - lib/glimmer/scaffold.rb
398
406
  - lib/glimmer/swt/color_proxy.rb
399
407
  - lib/glimmer/swt/cursor_proxy.rb
@@ -462,7 +470,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
462
470
  - !ruby/object:Gem::Version
463
471
  version: '0'
464
472
  requirements: []
465
- rubygems_version: 3.0.6
473
+ rubygems_version: 3.1.4
466
474
  signing_key:
467
475
  specification_version: 4
468
476
  summary: Glimmer DSL for SWT