glimmer 0.4.3 → 0.4.4

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +109 -2
  3. data/bin/girb +4 -2
  4. data/bin/glimmer +3 -2
  5. data/lib/glimmer.rb +6 -3
  6. data/lib/glimmer/command_handlers.rb +37 -34
  7. data/lib/glimmer/ext/module.rb +20 -0
  8. data/lib/glimmer/launcher.rb +75 -0
  9. data/lib/glimmer/swt/command_handlers/bind_command_handler.rb +55 -0
  10. data/lib/glimmer/swt/command_handlers/color_command_handler.rb +30 -0
  11. data/lib/glimmer/swt/command_handlers/combo_selection_data_binding_command_handler.rb +43 -0
  12. data/lib/glimmer/swt/command_handlers/custom_widget_command_handler.rb +24 -0
  13. data/lib/glimmer/swt/command_handlers/data_binding_command_handler.rb +72 -0
  14. data/lib/glimmer/swt/command_handlers/display_command_handler.rb +20 -0
  15. data/lib/glimmer/swt/command_handlers/layout_command_handler.rb +27 -0
  16. data/lib/glimmer/swt/command_handlers/layout_data_command_handler.rb +26 -0
  17. data/lib/glimmer/swt/command_handlers/list_selection_data_binding_command_handler.rb +48 -0
  18. data/lib/glimmer/swt/command_handlers/property_command_handler.rb +24 -0
  19. data/lib/glimmer/swt/command_handlers/shell_command_handler.rb +20 -0
  20. data/lib/glimmer/swt/command_handlers/tab_item_command_handler.rb +24 -0
  21. data/lib/glimmer/swt/command_handlers/table_column_properties_data_binding_command_handler.rb +28 -0
  22. data/lib/glimmer/swt/command_handlers/table_items_data_binding_command_handler.rb +33 -0
  23. data/lib/glimmer/swt/command_handlers/tree_items_data_binding_command_handler.rb +32 -0
  24. data/lib/glimmer/swt/command_handlers/tree_properties_data_binding_command_handler.rb +28 -0
  25. data/lib/glimmer/swt/command_handlers/widget_command_handler.rb +26 -0
  26. data/lib/glimmer/swt/command_handlers/widget_listener_command_handler.rb +43 -0
  27. data/lib/glimmer/swt/custom_widget.rb +91 -0
  28. data/lib/glimmer/swt/g_color.rb +39 -0
  29. data/lib/glimmer/swt/g_display.rb +28 -0
  30. data/lib/glimmer/swt/g_font.rb +75 -0
  31. data/lib/glimmer/swt/g_layout.rb +72 -0
  32. data/lib/glimmer/swt/g_layout_data.rb +56 -0
  33. data/lib/glimmer/swt/g_runnable.rb +15 -0
  34. data/lib/glimmer/swt/g_shell.rb +50 -0
  35. data/lib/glimmer/swt/g_swt.rb +65 -0
  36. data/lib/glimmer/swt/g_tab_item_composite.rb +34 -0
  37. data/lib/glimmer/swt/g_widget.rb +213 -0
  38. data/lib/glimmer/swt/g_widget_listener.rb +12 -0
  39. data/lib/glimmer/swt/list_selection_binding.rb +49 -0
  40. data/lib/glimmer/swt/model_binding.rb +208 -0
  41. data/lib/glimmer/swt/observable.rb +13 -0
  42. data/lib/glimmer/swt/observable_array.rb +105 -0
  43. data/lib/glimmer/swt/observable_model.rb +107 -0
  44. data/lib/glimmer/swt/observer.rb +117 -0
  45. data/lib/glimmer/swt/proc_tracker.rb +16 -0
  46. data/lib/glimmer/swt/table_items_binding.rb +47 -0
  47. data/lib/glimmer/swt/tree_items_binding.rb +51 -0
  48. data/lib/glimmer/swt/widget_binding.rb +31 -0
  49. data/lib/glimmer/xml/command_handlers/html_command_handler.rb +50 -0
  50. data/lib/glimmer/xml/command_handlers/xml_command_handler.rb +23 -0
  51. data/lib/glimmer/xml/command_handlers/xml_name_space_command_handler.rb +36 -0
  52. data/lib/glimmer/xml/command_handlers/xml_tag_command_handler.rb +28 -0
  53. data/lib/glimmer/xml/command_handlers/xml_text_command_handler.rb +24 -0
  54. data/lib/glimmer/xml/depth_first_search_iterator.rb +20 -0
  55. data/lib/glimmer/xml/name_space_visitor.rb +21 -0
  56. data/lib/glimmer/xml/node.rb +84 -0
  57. data/lib/glimmer/xml/node_visitor.rb +13 -0
  58. data/lib/glimmer/xml/xml_visitor.rb +63 -0
  59. data/lib/glimmer/xml_command_handlers.rb +11 -10
  60. metadata +68 -50
  61. data/lib/glimmer/command_handlers/bind_command_handler.rb +0 -51
  62. data/lib/glimmer/command_handlers/color_command_handler.rb +0 -26
  63. data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +0 -40
  64. data/lib/glimmer/command_handlers/data_binding_command_handler.rb +0 -69
  65. data/lib/glimmer/command_handlers/display_command_handler.rb +0 -16
  66. data/lib/glimmer/command_handlers/layout_command_handler.rb +0 -23
  67. data/lib/glimmer/command_handlers/layout_data_command_handler.rb +0 -22
  68. data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +0 -45
  69. data/lib/glimmer/command_handlers/models/g_color.rb +0 -34
  70. data/lib/glimmer/command_handlers/models/g_display.rb +0 -26
  71. data/lib/glimmer/command_handlers/models/g_font.rb +0 -73
  72. data/lib/glimmer/command_handlers/models/g_layout.rb +0 -71
  73. data/lib/glimmer/command_handlers/models/g_layout_data.rb +0 -55
  74. data/lib/glimmer/command_handlers/models/g_runnable.rb +0 -13
  75. data/lib/glimmer/command_handlers/models/g_shell.rb +0 -49
  76. data/lib/glimmer/command_handlers/models/g_swt.rb +0 -63
  77. data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +0 -33
  78. data/lib/glimmer/command_handlers/models/g_widget.rb +0 -214
  79. data/lib/glimmer/command_handlers/models/g_widget_listener.rb +0 -11
  80. data/lib/glimmer/command_handlers/models/list_selection_binding.rb +0 -47
  81. data/lib/glimmer/command_handlers/models/model_binding.rb +0 -206
  82. data/lib/glimmer/command_handlers/models/observable.rb +0 -11
  83. data/lib/glimmer/command_handlers/models/observable_array.rb +0 -104
  84. data/lib/glimmer/command_handlers/models/observable_model.rb +0 -105
  85. data/lib/glimmer/command_handlers/models/observer.rb +0 -115
  86. data/lib/glimmer/command_handlers/models/table_items_binding.rb +0 -45
  87. data/lib/glimmer/command_handlers/models/tree_items_binding.rb +0 -49
  88. data/lib/glimmer/command_handlers/models/widget_binding.rb +0 -29
  89. data/lib/glimmer/command_handlers/property_command_handler.rb +0 -21
  90. data/lib/glimmer/command_handlers/shell_command_handler.rb +0 -17
  91. data/lib/glimmer/command_handlers/tab_item_command_handler.rb +0 -21
  92. data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -25
  93. data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +0 -30
  94. data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +0 -29
  95. data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +0 -25
  96. data/lib/glimmer/command_handlers/widget_command_handler.rb +0 -22
  97. data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +0 -39
  98. data/lib/glimmer/xml_command_handlers/html_command_handler.rb +0 -47
  99. data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +0 -19
  100. data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +0 -20
  101. data/lib/glimmer/xml_command_handlers/models/node.rb +0 -82
  102. data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +0 -11
  103. data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +0 -61
  104. data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +0 -20
  105. data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +0 -33
  106. data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +0 -25
  107. data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +0 -21
  108. data/lib/glimmer_application.rb +0 -65
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01b2e0936795d4ac088a3ea7c7045c22fbe064fd7d88283af396c3239f77bb59
4
- data.tar.gz: c202f93d54b4b20a96cbd5c6f493ebc3d7919d92b7b02db69e6ac8feacd9c6e7
3
+ metadata.gz: cec5986595dd78ec9811f6a717e689834b5808757932488751393047d58b62a1
4
+ data.tar.gz: 73cd3972ef8d0b637a1fdeed9a7f8117da2afec2dffeedc9f9b3cc2e4fc971b9
5
5
  SHA512:
6
- metadata.gz: 40669eb87ebceef14f5c397ea2d4c51d55fa7daacfab7ef3a9fc110ea0dc739e2cb7b169824bf4d0cb01c32665c794a440763d9b68be56a891bca2a93c950a02
7
- data.tar.gz: ca479f2226c69678976cc51f71c8496fd24b96a4538b913bc5f976c2b0653c5538d5bc85f372b06adc593615e045d2718581585fc42cef457df480f7cb7255f0
6
+ metadata.gz: efa303ce11d71e9b7b9864de4c6edac9431e0a85905d2bf74a3d1c6b8b36131cf84a17a7e32977b4f1421aa1bc558da7a392dbc5814201928034fc98b2f158c5
7
+ data.tar.gz: 8fd39a5f47a9d10d6c6b00e2c14925579f3817e803c7e1fdd71e69b7d9a7c0fc70c04b9db034822bd7e1ab002d96c8f998f412561111cee21dcd985d3fa887f3
@@ -102,14 +102,14 @@ Please follow these instructions to make the `glimmer` command available on your
102
102
 
103
103
  Run this command to install directly:
104
104
  ```
105
- jgem install glimmer -v 0.4.3
105
+ jgem install glimmer -v 0.4.4
106
106
  ```
107
107
 
108
108
  ### Option 2: Bundler
109
109
 
110
110
  Add the following to `Gemfile`:
111
111
  ```
112
- gem 'glimmer', '~> 0.4.3'
112
+ gem 'glimmer', '~> 0.4.4'
113
113
  ```
114
114
 
115
115
  And, then run:
@@ -569,6 +569,113 @@ class TicTacToe
569
569
  end
570
570
  ```
571
571
 
572
+ ## Custom Widgets
573
+
574
+ Glimmer supports creating custom widgets with minimal code, which automatically extends Glimmer's DSL syntax with an underscored lowercase keyword.
575
+
576
+ Simply create a new class that includes `Glimmer::SWT::CustomWidget` and put Glimmer DSL code in its `#body` method (its return value is stored in `#body_root` attribute). Glimmer will then automatically recognize this class by convention when it encounters a keyword matching the class name converted to underscored lowercase (and namespace double-colons `::` replaced with double-underscores `__`)
577
+
578
+ **Example:**
579
+
580
+ Definition:
581
+ ```ruby
582
+ class RedLabel
583
+ include Glimmer::SWT::CustomWidget
584
+ def body
585
+ label(swt_style) {
586
+ background :red
587
+ }
588
+ end
589
+ end
590
+ ```
591
+
592
+ Usage:
593
+ ```ruby
594
+ shell {
595
+ red_label {
596
+ text 'Red Label'
597
+ }
598
+ }
599
+ ```
600
+
601
+ As you can see, `RedLabel` became Glimmer DSL keyword: `red_label`
602
+
603
+ **Another Example:**
604
+
605
+ Definition:
606
+ ```ruby
607
+ module Red
608
+ class Composite
609
+ include Glimmer::SWT::CustomWidget
610
+ def body
611
+ composite(swt_style) {
612
+ background :red
613
+ }
614
+ end
615
+ end
616
+ ```
617
+
618
+ Usage:
619
+ ```ruby
620
+ shell {
621
+ red__composite {
622
+ label {
623
+ foreground :white
624
+ text 'This is showing inside a Red Composite'
625
+ }
626
+ }
627
+ }
628
+ ```
629
+
630
+ Notice how `Red::Composite` became `red__composite` with double-underscore, which is how Glimmer Custom Widgets signify namespaces by convention.
631
+
632
+ Custom Widgets have the following attributes available to call from inside the `#body` method:
633
+ - `#parent`: Glimmer object parenting custom widget
634
+ - `#swt_style`: SWT style integer. Can be useful if you want to allow consumers to customize a widget inside the custom widget body
635
+ - `#options`: a hash of options passed in parentheses when declaring a custom widget (useful for passing in model data) (e.g. `calendar(events: events)`). Custom widget class can declare option names (array) with `.options` method as shown below (not to be confused with `#options` instance method for retrieving options hash containing names & values)
636
+ - `#content`: nested block underneath custom widget. It will be automatically called at the end of processing the custom widget body. Alternatively, the custom widget body may call `content.call` at the place where the content is needed to show up as shown in the following example.
637
+
638
+ **Content/Options Example:**
639
+
640
+ Definition:
641
+ ```ruby
642
+ class Sandwich
643
+ include Glimmer::SWT::CustomWidget
644
+ options :orientation, :bg_color
645
+ def body
646
+ composite(swt_style) { # gets custom widget style
647
+ fill_layout orientation # using orientation option
648
+ background container_background # using container_background option
649
+ label {
650
+ text 'SANDWICH TOP'
651
+ }
652
+ content.call # this is where content block is called
653
+ label {
654
+ text 'SANDWICH BOTTOM'
655
+ }
656
+ }
657
+ end
658
+ end
659
+ ```
660
+
661
+ Usage:
662
+ ```ruby
663
+ shell {
664
+ sandwich(:no_focus, orientation: :horizontal, bg_color: :white) {
665
+ label {
666
+ text 'SANDWICH CONTENT'
667
+ }
668
+ }
669
+ }
670
+ ```
671
+
672
+ Notice how `:no_focus` was the `swt_style` value, followed by the `options` hash `{orientation: :horizontal, bg_color: :white}`, and finally the `content` block containing the label with `'SANDWICH CONTENT'`
673
+
674
+ The following additional attributes may be called from outside a custom widget in addition to the attributes mentioned above, assuming it's been captured in a variable:
675
+ - `#body_root`: top-most root Glimmer widget returned in `#body` method
676
+ - `#widget`: actual SWT widget for `body_root`
677
+
678
+
572
679
  ## Samples
573
680
 
574
681
  Check the [samples](https://github.com/AndyObtiva/glimmer/tree/master/samples) directory for examples on how to write Glimmer applications. To run a sample, make sure to install the `glimmer` gem first and then use the `glimmer` command to run it (alternatively, you may clone the repo, follow [CONTRIBUTING.md](https://github.com/AndyObtiva/glimmer/blob/master/CONTRIBUTING.md) instructions, and run samples locally with development glimmer command: `bin/glimmer --dev`).
data/bin/girb CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- require_relative '../lib/glimmer_application'
3
- GlimmerApplication.new(ARGV + ['irb']).start
2
+
3
+ require_relative '../lib/glimmer/launcher'
4
+
5
+ Glimmer::Launcher.new(['irb'] + ARGV).launch
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative File.join('..', 'lib', 'glimmer_application')
4
- GlimmerApplication.new(ARGV).start
3
+ require_relative '../lib/glimmer/launcher'
4
+
5
+ Glimmer::Launcher.new(ARGV).launch
@@ -5,10 +5,13 @@
5
5
 
6
6
  require "rubygems"
7
7
  require "facets"
8
+ require "super_module"
8
9
  require "logger"
9
10
  require "java"
10
11
  require_relative "glimmer/parent"
11
- require_relative "glimmer/swt_packages"
12
+ require_relative "glimmer/swt_packages" #TODO move into SWT namespace
13
+ require_relative "glimmer/swt/custom_widget"
14
+ require_relative "glimmer/ext/module"
12
15
 
13
16
  module Glimmer
14
17
  #TODO make it configurable to include or not include
@@ -62,5 +65,5 @@ module Glimmer
62
65
  end
63
66
 
64
67
  # Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
65
- require File.dirname(__FILE__) + "/glimmer/xml_command_handlers"
66
- require File.dirname(__FILE__) + "/glimmer/command_handlers"
68
+ require File.dirname(__FILE__) + "/glimmer/xml_command_handlers" #TODO move into namespace
69
+ require File.dirname(__FILE__) + "/glimmer/command_handlers" #TODO move into namespace
@@ -1,41 +1,44 @@
1
1
  require_relative "command_handler_chain_factory"
2
- require_relative "command_handlers/color_command_handler"
3
- require_relative "command_handlers/display_command_handler"
4
- require_relative "command_handlers/shell_command_handler"
5
- require_relative "command_handlers/layout_command_handler"
6
- require_relative "command_handlers/layout_data_command_handler"
7
- require_relative "command_handlers/widget_listener_command_handler"
8
- require_relative "command_handlers/bind_command_handler"
9
- require_relative "command_handlers/tab_item_command_handler"
10
- require_relative "command_handlers/combo_selection_data_binding_command_handler"
11
- require_relative "command_handlers/list_selection_data_binding_command_handler"
12
- require_relative "command_handlers/tree_items_data_binding_command_handler"
13
- require_relative "command_handlers/tree_properties_data_binding_command_handler"
14
- require_relative "command_handlers/table_items_data_binding_command_handler"
15
- require_relative "command_handlers/table_column_properties_data_binding_command_handler"
16
- require_relative "command_handlers/data_binding_command_handler"
17
- require_relative "command_handlers/property_command_handler"
18
- require_relative "command_handlers/widget_command_handler"
2
+ require_relative "swt/command_handlers/color_command_handler"
3
+ require_relative "swt/command_handlers/display_command_handler"
4
+ require_relative "swt/command_handlers/shell_command_handler"
5
+ require_relative "swt/command_handlers/layout_command_handler"
6
+ require_relative "swt/command_handlers/layout_data_command_handler"
7
+ require_relative "swt/command_handlers/widget_listener_command_handler"
8
+ require_relative "swt/command_handlers/bind_command_handler"
9
+ require_relative "swt/command_handlers/tab_item_command_handler"
10
+ require_relative "swt/command_handlers/combo_selection_data_binding_command_handler"
11
+ require_relative "swt/command_handlers/list_selection_data_binding_command_handler"
12
+ require_relative "swt/command_handlers/tree_items_data_binding_command_handler"
13
+ require_relative "swt/command_handlers/tree_properties_data_binding_command_handler"
14
+ require_relative "swt/command_handlers/table_items_data_binding_command_handler"
15
+ require_relative "swt/command_handlers/table_column_properties_data_binding_command_handler"
16
+ require_relative "swt/command_handlers/data_binding_command_handler"
17
+ require_relative "swt/command_handlers/property_command_handler"
18
+ require_relative "swt/command_handlers/widget_command_handler"
19
+ require_relative "swt/command_handlers/custom_widget_command_handler"
19
20
 
21
+ # TODO move into SWT namespace
20
22
  module Glimmer
21
23
  # edit to add more command handlers and extend Glimmer
22
24
  CommandHandlerChainFactory.def_dsl(:swt,
23
- DisplayCommandHandler.new,
24
- ShellCommandHandler.new,
25
- LayoutDataCommandHandler.new,
26
- LayoutCommandHandler.new,
27
- WidgetListenerCommandHandler.new,
28
- BindCommandHandler.new,
29
- TabItemCommandHandler.new,
30
- ComboSelectionDataBindingCommandHandler.new,
31
- ListSelectionDataBindingCommandHandler.new,
32
- TreeItemsDataBindingCommandHandler.new,
33
- TreePropertiesDataBindingCommandHandler.new,
34
- TableItemsDataBindingCommandHandler.new,
35
- TableColumnPropertiesDataBindingCommandHandler.new,
36
- DataBindingCommandHandler.new,
37
- ColorCommandHandler.new,
38
- PropertyCommandHandler.new,
39
- WidgetCommandHandler.new
25
+ SWT::CommandHandlers::DisplayCommandHandler.new,
26
+ SWT::CommandHandlers::ShellCommandHandler.new,
27
+ SWT::CommandHandlers::LayoutDataCommandHandler.new,
28
+ SWT::CommandHandlers::LayoutCommandHandler.new,
29
+ SWT::CommandHandlers::WidgetListenerCommandHandler.new,
30
+ SWT::CommandHandlers::BindCommandHandler.new,
31
+ SWT::CommandHandlers::TabItemCommandHandler.new,
32
+ SWT::CommandHandlers::ComboSelectionDataBindingCommandHandler.new,
33
+ SWT::CommandHandlers::ListSelectionDataBindingCommandHandler.new,
34
+ SWT::CommandHandlers::TreeItemsDataBindingCommandHandler.new,
35
+ SWT::CommandHandlers::TreePropertiesDataBindingCommandHandler.new,
36
+ SWT::CommandHandlers::TableItemsDataBindingCommandHandler.new,
37
+ SWT::CommandHandlers::TableColumnPropertiesDataBindingCommandHandler.new,
38
+ SWT::CommandHandlers::DataBindingCommandHandler.new,
39
+ SWT::CommandHandlers::ColorCommandHandler.new,
40
+ SWT::CommandHandlers::PropertyCommandHandler.new,
41
+ SWT::CommandHandlers::WidgetCommandHandler.new,
42
+ SWT::CommandHandlers::CustomWidgetCommandHandler.new
40
43
  )
41
44
  end
@@ -0,0 +1,20 @@
1
+ class Module
2
+ # TODO improve this (make it work dynamically per DSL loaded)
3
+ begin
4
+ instance_method(:const_missing_without_glimmer)
5
+ rescue
6
+ alias const_missing_without_glimmer const_missing
7
+
8
+ def const_missing(constant)
9
+ return const_missing_without_glimmer(constant) if @const_missing_without_glimmer_constant
10
+ @const_missing_without_glimmer_constant = constant
11
+ ::Glimmer::SWT.const_get(constant)
12
+ rescue LoadError => e
13
+ const_missing_without_glimmer(constant)
14
+ rescue => e
15
+ const_missing_without_glimmer(constant)
16
+ ensure
17
+ @const_missing_without_glimmer_constant = nil
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,75 @@
1
+ require 'os'
2
+
3
+ module Glimmer
4
+ class Launcher
5
+ OPERATING_SYSTEMS_SUPPORTED = ["mac", "windows", "linux"]
6
+ TEXT_USAGE = <<-MULTILINE
7
+ Usage: glimmer application.rb
8
+
9
+ Runs a Glimmer application using JRuby, automatically preloading
10
+ the glimmer ruby gem and SWT jar dependency.
11
+
12
+ Example: glimmer hello_world.rb
13
+ This runs the Glimmer application hello_world.rb
14
+ MULTILINE
15
+ GLIMMER_LIB_LOCAL = File.expand_path(File.join(__FILE__, '..', '..', 'glimmer.rb'))
16
+ GLIMMER_LIB_GEM = 'glimmer'
17
+
18
+ class << self
19
+ def platform_os
20
+ OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")}
21
+ end
22
+
23
+ def swt_jar_file
24
+ @swt_jar_file ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar'))
25
+ end
26
+
27
+ def jruby_os_specific_options
28
+ OS.mac? ? "-J-XstartOnFirstThread" : ""
29
+ end
30
+
31
+ def jruby_swt_options
32
+ "#{jruby_os_specific_options} -J-classpath \"#{swt_jar_file}\""
33
+ end
34
+
35
+ def launch(application, dev_mode = false, debug_mode = false)
36
+ glimmer_lib = GLIMMER_LIB_GEM
37
+ if dev_mode
38
+ glimmer_lib = GLIMMER_LIB_LOCAL
39
+ puts "[DEVELOPMENT MODE] (#{glimmer_lib})"
40
+ end
41
+ debug_option = ''
42
+ if debug_mode
43
+ debug_option = '--debug '
44
+ puts "[DEBUG MODE]"
45
+ end
46
+ system "jruby #{debug_option}#{jruby_swt_options} -r #{glimmer_lib} -S #{application}"
47
+ end
48
+ end
49
+
50
+ def initialize(options)
51
+ @dev_mode = !!options.delete('--dev')
52
+ @debug_mode = !!options.delete('--debug')
53
+ @application_path = options.first
54
+ end
55
+
56
+ def launch
57
+ if @application_path
58
+ launch_application
59
+ else
60
+ display_usage
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def launch_application
67
+ puts "Launching Glimmer Application: #{@application_path}" unless @application_path == 'irb'
68
+ self.class.launch(@application_path, @dev_mode, @debug_mode)
69
+ end
70
+
71
+ def display_usage
72
+ puts TEXT_USAGE
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../model_binding"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ # Responsible for setting up the return value of the bind keyword (command symbol)
9
+ # as a ModelBinding. It is then used by another command handler like
10
+ # DataBindingCommandHandler for text and selection properties on Text and Spinner
11
+ # or TableItemsDataBindingCommandHandler for items in a Table
12
+ class BindCommandHandler
13
+ include CommandHandler
14
+
15
+ include_package 'org.eclipse.swt.widgets'
16
+
17
+ def can_handle?(parent, command_symbol, *args, &block)
18
+ # TODO refactor this long condition below
19
+ (
20
+ parent.is_a?(GWidget) and
21
+ command_symbol.to_s == "bind" and
22
+ (
23
+ (
24
+ (args.size == 2) and
25
+ (
26
+ args[1].is_a?(Symbol) or
27
+ args[1].is_a?(String)
28
+ )
29
+ ) or
30
+ (
31
+ (args.size == 3) and
32
+ (args[1].is_a?(Symbol) or args[1].is_a?(String)) and
33
+ (args[2].is_a?(Symbol) or args[2].is_a?(String) or args[2].is_a?(Hash))
34
+ ) or
35
+ (
36
+ (args.size == 4) and
37
+ (args[1].is_a?(Symbol) or args[1].is_a?(String)) and
38
+ (args[2].is_a?(Symbol) or args[2].is_a?(String)) and
39
+ (args[3].is_a?(Hash))
40
+ )
41
+ ) and
42
+ block == nil
43
+ )
44
+ end
45
+
46
+ def do_handle(parent, command_symbol, *args, &block)
47
+ property_type = args[2] if (args.size == 3) && !args[2].is_a?(Hash)
48
+ binding_options = args[2] if args[2].is_a?(Hash)
49
+ binding_options = args[3] if args[3].is_a?(Hash)
50
+ ModelBinding.new(args[0], args[1].to_s, property_type, binding_options)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../command_handler'
2
+ require_relative '../g_color'
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ class ColorCommandHandler
8
+ include CommandHandler
9
+
10
+ include_package 'org.eclipse.swt.widgets'
11
+
12
+ def can_handle?(parent, command_symbol, *args, &block)
13
+ ['rgba', 'rgb'].include?(command_symbol.to_s) and
14
+ (3..5).include?(args.count)
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ if args.first.is_a?(Display) || args.first.nil?
19
+ display = args.delete_at(0)
20
+ elsif parent.is_a?(GWidget)
21
+ display = parent.widget.display
22
+ else
23
+ display = GDisplay.instance.display
24
+ end
25
+ GColor.new(display, *args)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end