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