glimmer 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
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