glimmer 0.1.0.0 → 0.1.2
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.
- data/.rvmrc +1 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +54 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/bin/glimmer +132 -0
- data/glimmer.gemspec +145 -0
- data/images/Bitter-sweet.jpg +0 -0
- data/{src → lib}/command_handler.rb +7 -10
- data/{src → lib}/command_handler_chain_factory.rb +29 -22
- data/{src → lib}/command_handler_chain_link.rb +19 -22
- data/{src → lib}/command_handlers.rb +29 -26
- data/{src → lib}/command_handlers/bind_command_handler.rb +25 -28
- data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +39 -0
- data/{src → lib}/command_handlers/data_binding_command_handler.rb +61 -64
- data/lib/command_handlers/list_selection_data_binding_command_handler.rb +42 -0
- data/lib/command_handlers/models/list_observer.rb +31 -0
- data/{src → lib}/command_handlers/models/model_observer.rb +28 -25
- data/{src → lib}/command_handlers/models/observable_array.rb +53 -46
- data/lib/command_handlers/models/observable_model.rb +61 -0
- data/{src → lib}/command_handlers/models/r_runnable.rb +11 -14
- data/{src → lib}/command_handlers/models/r_shell.rb +23 -26
- data/lib/command_handlers/models/r_tab_item_composite.rb +25 -0
- data/{src → lib}/command_handlers/models/r_widget.rb +16 -14
- data/lib/command_handlers/models/r_widget_listener.rb +9 -0
- data/{src → lib}/command_handlers/models/r_widget_packages.rb +5 -8
- data/{src → lib}/command_handlers/models/table_items_updater.rb +38 -39
- data/{src → lib}/command_handlers/models/widget_observer.rb +4 -6
- data/{src → lib}/command_handlers/shell_command_handler.rb +14 -17
- data/{src → lib}/command_handlers/swt_constant_command_handler.rb +18 -21
- data/lib/command_handlers/tab_item_command_handler.rb +22 -0
- data/{src → lib}/command_handlers/table_column_properties_data_binding_command_handler.rb +20 -23
- data/{src → lib}/command_handlers/table_items_data_binding_command_handler.rb +26 -29
- data/{src → lib}/command_handlers/widget_command_handler.rb +22 -25
- data/{src → lib}/command_handlers/widget_listener_command_handler.rb +36 -34
- data/{src → lib}/command_handlers/widget_method_command_handler.rb +18 -21
- data/{src → lib}/glimmer.rb +52 -45
- data/lib/parent.rb +5 -0
- data/{src → lib}/shine.rb +21 -24
- data/{src → lib}/xml_command_handlers.rb +15 -18
- data/{src → lib}/xml_command_handlers/html_command_handler.rb +45 -49
- data/{src → lib}/xml_command_handlers/models/depth_first_search_iterator.rb +17 -20
- data/{src → lib}/xml_command_handlers/models/name_space_visitor.rb +17 -20
- data/{src → lib}/xml_command_handlers/models/node.rb +80 -83
- data/{src → lib}/xml_command_handlers/models/node_visitor.rb +8 -11
- data/{src → lib}/xml_command_handlers/models/xml_visitor.rb +58 -61
- data/{src → lib}/xml_command_handlers/xml_command_handler.rb +18 -22
- data/{src → lib}/xml_command_handlers/xml_name_space_command_handler.rb +31 -34
- data/{src → lib}/xml_command_handlers/xml_tag_command_handler.rb +23 -26
- data/{src → lib}/xml_command_handlers/xml_text_command_handler.rb +19 -22
- data/samples/contactmanager/contact.rb +0 -3
- data/samples/contactmanager/contact_manager.rb +1 -4
- data/samples/contactmanager/contact_manager_presenter.rb +0 -3
- data/samples/contactmanager/contact_repository.rb +0 -3
- data/samples/hello_combo.rb +32 -0
- data/samples/hello_world.rb +1 -4
- data/samples/login.rb +1 -4
- data/samples/tictactoe/tic_tac_toe.rb +2 -5
- data/samples/tictactoe/tic_tac_toe_board.rb +0 -3
- data/test/glimmer_combo_data_binding_test.rb +131 -0
- data/test/glimmer_constant_test.rb +6 -11
- data/test/glimmer_data_binding_test.rb +16 -16
- data/test/glimmer_list_data_binding_test.rb +223 -0
- data/test/glimmer_listeners_test.rb +6 -6
- data/test/glimmer_shine_data_binding_test.rb +7 -6
- data/test/glimmer_tab_item_test.rb +61 -0
- data/test/glimmer_table_data_binding_test.rb +7 -20
- data/test/glimmer_test.rb +18 -13
- data/test/helper.rb +21 -0
- data/test/observable_model_test.rb +2 -4
- data/test/r_widget_test.rb +5 -5
- data/test/samples/contactmanager/contact_manager_presenter_test.rb +1 -4
- data/test/samples/tictactoe/tic_tac_toe_test.rb +1 -4
- data/test/xml/glimmer_xml_test.rb +43 -43
- metadata +210 -105
- data/COPYING.LGPL +0 -504
- data/README +0 -27
- data/src/command_handlers/models/observable_model.rb +0 -35
- data/src/command_handlers/models/r_widget_listener.rb +0 -12
- data/src/parent.rb +0 -8
- data/src/swt.rb +0 -10
- data/src/xml.rb +0 -10
@@ -1,10 +1,8 @@
|
|
1
|
-
# Copyright (C) 2007-2008 Annas Al Maleh
|
2
|
-
# Licensed under the LGPL. See /COPYING.LGPL for more details.
|
3
|
-
|
4
1
|
class WidgetObserver
|
5
2
|
attr_reader :widget, :property
|
6
3
|
@@property_type_converters = {
|
7
|
-
:text => Proc.new { |value| value.to_s }
|
4
|
+
:text => Proc.new { |value| value.to_s },
|
5
|
+
:items => Proc.new { |value| value.to_java :string}
|
8
6
|
}
|
9
7
|
def initialize model, property
|
10
8
|
@widget = model
|
@@ -14,10 +12,10 @@ class WidgetObserver
|
|
14
12
|
converted_value = value
|
15
13
|
converter = @@property_type_converters[@property.to_sym]
|
16
14
|
converted_value = converter.call(value) if converter
|
17
|
-
@widget.widget.send
|
15
|
+
@widget.widget.send("set#{@property.camelcase(:upper)}", converted_value) unless evaluate_property == converted_value
|
18
16
|
end
|
19
17
|
def evaluate_property
|
20
|
-
@widget.widget.send(
|
18
|
+
@widget.widget.send(@property)
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
@@ -1,18 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
RShell.send(:new, *args)
|
16
|
-
end
|
17
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_shell"
|
3
|
+
|
4
|
+
class ShellCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
8
|
+
command_symbol.to_s == "shell"
|
9
|
+
end
|
10
|
+
|
11
|
+
def do_handle(parent, command_symbol, *args, &block)
|
12
|
+
RShell.send(:new, *args)
|
13
|
+
end
|
14
|
+
|
18
15
|
end
|
@@ -1,22 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
|
20
|
-
end
|
21
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
|
4
|
+
class SwtConstantCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
include_package 'org.eclipse.swt'
|
8
|
+
|
9
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
+
args.size == 0 and
|
11
|
+
block == nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def do_handle(parent, command_symbol, *args, &block)
|
15
|
+
puts 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
|
16
|
+
eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
|
17
|
+
end
|
18
|
+
|
22
19
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_shell"
|
3
|
+
require File.dirname(__FILE__) + "/models/r_tab_item_composite"
|
4
|
+
|
5
|
+
class TabItemCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
include Glimmer
|
8
|
+
|
9
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
+
parent.is_a?(RWidget) and
|
11
|
+
command_symbol.to_s == "tab_item" and
|
12
|
+
(args.size == 0 or
|
13
|
+
(args.size == 1 and args[0].is_a?(Fixnum)))
|
14
|
+
end
|
15
|
+
|
16
|
+
def do_handle(parent, command_symbol, *args, &block)
|
17
|
+
style = args[0] if args.size == 1
|
18
|
+
tab_item = RWidget.new(command_symbol.to_s, parent.widget, style)
|
19
|
+
RTabItemComposite.new(tab_item, parent.widget, style)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -1,24 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
args
|
22
|
-
end
|
23
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
|
4
|
+
class TableColumnPropertiesDataBindingCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
include_package 'org.eclipse.swt'
|
8
|
+
include_package 'org.eclipse.swt.widgets'
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
parent.is_a?(RWidget) and
|
12
|
+
parent.widget.is_a?(Table) and
|
13
|
+
command_symbol.to_s == "column_properties" and
|
14
|
+
block == nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def do_handle(parent, command_symbol, *args, &block)
|
18
|
+
args
|
19
|
+
end
|
20
|
+
|
24
21
|
end
|
@@ -1,30 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
args.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
TableItemsUpdater.new(parent, model_observer, column_properties)
|
28
|
-
end
|
29
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
require File.dirname(__FILE__) + "/models/table_items_updater"
|
4
|
+
|
5
|
+
class TableItemsDataBindingCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
|
8
|
+
include_package 'org.eclipse.swt.widgets'
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
parent.is_a?(RWidget) and
|
12
|
+
parent.widget.is_a?(Table) and
|
13
|
+
command_symbol.to_s == "items" and
|
14
|
+
args.size == 2 and
|
15
|
+
args[0].is_a?(ModelObserver) and
|
16
|
+
args[0].evaluate_property.is_a?(Array) and
|
17
|
+
args[1].is_a?(Array) and
|
18
|
+
block == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_handle(parent, command_symbol, *args, &block)
|
22
|
+
model_observer = args[0]
|
23
|
+
column_properties = args[1]
|
24
|
+
TableItemsUpdater.new(parent, model_observer, column_properties)
|
25
|
+
end
|
26
|
+
|
30
27
|
end
|
@@ -1,26 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
command_symbol.to_s
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
RWidget.new(command_symbol.to_s, parent.widget, style)
|
24
|
-
end
|
25
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
|
4
|
+
class WidgetCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
include_package 'org.eclipse.swt.widgets'
|
8
|
+
|
9
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
+
parent.is_a?(RWidget) and
|
11
|
+
command_symbol.to_s != "shell" and
|
12
|
+
(args.size == 0 or
|
13
|
+
(args.size == 1 and args[0].is_a?(Fixnum))) and
|
14
|
+
RWidget.widget_exists?(command_symbol.to_s)
|
15
|
+
end
|
16
|
+
|
17
|
+
def do_handle(parent, command_symbol, *args, &block)
|
18
|
+
style = args[0] if args.size == 1
|
19
|
+
puts "style argument is: " + style.to_s
|
20
|
+
RWidget.new(command_symbol.to_s, parent.widget, style)
|
21
|
+
end
|
22
|
+
|
26
23
|
end
|
@@ -1,35 +1,37 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
|
4
|
+
class WidgetListenerCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
include_package 'org.eclipse.swt.widgets'
|
8
|
+
|
9
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
+
puts "parent is a widget: " + (parent.is_a?(RWidget)).to_s
|
11
|
+
return unless parent.is_a?(RWidget)
|
12
|
+
puts "on listener?: " + (command_symbol.to_s[0,3] == "on_").to_s
|
13
|
+
return unless command_symbol.to_s[0,3] == "on_"
|
14
|
+
puts "command symbol is longer than 3: " + (command_symbol.to_s.length > 3).to_s
|
15
|
+
return unless command_symbol.to_s.length > 3
|
16
|
+
puts "args are 0?: " + (args.size == 0).to_s
|
17
|
+
return unless args.size == 0
|
18
|
+
puts "can add listener? " + (parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])).to_s
|
19
|
+
parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
|
20
|
+
end
|
21
|
+
|
22
|
+
def do_handle(parent, command_symbol, *args, &block)
|
23
|
+
parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
|
24
|
+
ListenerParent.new #TODO refactor and move to models
|
25
|
+
end
|
26
|
+
|
27
|
+
#TODO refactor and move to separate file
|
28
|
+
class ListenerParent
|
29
|
+
include Parent
|
30
|
+
|
31
|
+
def process_block(block)
|
32
|
+
#NOOP
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
35
37
|
end
|
@@ -1,22 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
+
|
4
|
+
class WidgetMethodCommandHandler
|
5
|
+
include CommandHandler
|
6
|
+
|
7
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
8
|
+
parent.is_a?(RWidget) and
|
9
|
+
args.size > 0 and
|
10
|
+
block == nil and
|
11
|
+
parent.respond_to?(command_symbol, *args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def do_handle(parent, command_symbol, *args, &block)
|
15
|
+
parent.send(command_symbol, *args)
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
22
19
|
end
|
data/{src → lib}/glimmer.rb
RENAMED
@@ -1,45 +1,52 @@
|
|
1
|
-
# Glimmer - a JRuby DSL that enables easy and efficient authoring of user
|
2
|
-
# using the robust platform-independent Eclipse SWT library. Glimmer
|
3
|
-
# data-binding support to greatly facilitate synchronizing
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require "
|
9
|
-
require "
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
return_value
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
@@parent_stack.
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
1
|
+
# Glimmer - a JRuby DSL that enables easy and efficient authoring of user
|
2
|
+
# interfaces using the robust platform-independent Eclipse SWT library. Glimmer
|
3
|
+
# comes with built-in data-binding support to greatly facilitate synchronizing
|
4
|
+
# UI with domain models.
|
5
|
+
|
6
|
+
require "rubygems"
|
7
|
+
require "facets"
|
8
|
+
require "java"
|
9
|
+
require File.dirname(__FILE__) + "/parent"
|
10
|
+
|
11
|
+
module Glimmer
|
12
|
+
|
13
|
+
include_package 'org.eclipse.swt'
|
14
|
+
|
15
|
+
@@parent_stack = []
|
16
|
+
|
17
|
+
def self.method_missing(method_symbol, *args, &block)
|
18
|
+
puts "method: " + method_symbol.to_s + " and args: " + args.to_s
|
19
|
+
command_handler_chain = CommandHandlerChainFactory.chain
|
20
|
+
return_value = command_handler_chain.handle(@@parent_stack.last, method_symbol, *args, &block)
|
21
|
+
add_contents(return_value, &block)
|
22
|
+
return return_value
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.add_contents(parent, &block)
|
26
|
+
@@parent_stack.push(parent) if parent.is_a?(Parent)
|
27
|
+
@@parent_stack.last.process_block(block) if block and @@parent_stack.last
|
28
|
+
@@parent_stack.pop if parent.is_a?(Parent)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.dsl(dsl)
|
32
|
+
CommandHandlerChainFactory.select_dsl(dsl)
|
33
|
+
end
|
34
|
+
|
35
|
+
#added for convenience
|
36
|
+
|
37
|
+
def method_missing(method_symbol, *args, &block)
|
38
|
+
Glimmer.method_missing(method_symbol, *args, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_contents(parent, &block)
|
42
|
+
Glimmer.add_contents(parent, &block)
|
43
|
+
end
|
44
|
+
|
45
|
+
def dsl(dsl)
|
46
|
+
CommandHandlerChainFactory.select_dsl(dsl)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
|
51
|
+
require File.dirname(__FILE__) + "/command_handlers"
|
52
|
+
require File.dirname(__FILE__) + "/xml_command_handlers"
|