ruboto 0.9.0 → 0.10.0.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +13 -13
- data/Rakefile +4 -4
- data/assets/rakelib/ruboto.rake +8 -4
- data/assets/samples/sample_broadcast_receiver.rb +0 -8
- data/assets/src/InheritingBroadcastReceiver.java +0 -19
- data/assets/src/InheritingClass.java +1 -8
- data/assets/src/RubotoActivity.java +1 -20
- data/assets/src/RubotoBroadcastReceiver.java +15 -25
- data/assets/src/RubotoService.java +1 -15
- data/assets/src/org/ruboto/EntryPointActivity.java +0 -1
- data/assets/src/org/ruboto/JRubyAdapter.java +9 -8
- data/assets/src/org/ruboto/RubotoComponent.java +0 -3
- data/assets/src/org/ruboto/Script.java +9 -9
- data/assets/src/org/ruboto/ScriptInfo.java +0 -15
- data/assets/src/org/ruboto/ScriptLoader.java +31 -43
- data/assets/src/ruboto/activity.rb +16 -41
- data/assets/src/ruboto/base.rb +0 -70
- data/assets/src/ruboto/broadcast_receiver.rb +2 -22
- data/assets/src/ruboto/package.rb +0 -1
- data/assets/src/ruboto/preference.rb +7 -3
- data/assets/src/ruboto/service.rb +14 -51
- data/assets/src/ruboto/widget.rb +2 -2
- data/lib/DexClient.java +10 -3
- data/lib/ruboto/util/build.rb +0 -5
- data/lib/ruboto/util/code_formatting.rb +1 -1
- data/lib/ruboto/util/update.rb +69 -50
- data/lib/ruboto/util/verify.rb +6 -5
- data/lib/ruboto/util/xml_element.rb +16 -29
- data/lib/ruboto/version.rb +2 -2
- data/test/activity/mytest_activity.rb +56 -0
- data/test/activity/mytest_activity_test.rb +52 -0
- data/test/activity/mytest_otherfile_activity.rb +12 -0
- data/test/activity/navigation_activity.rb +1 -1
- data/test/activity/subclass_activity.rb +10 -5
- data/test/activity/subclass_activity_test.rb +17 -2
- data/test/activity/view_constants_activity.rb +42 -0
- data/test/activity/view_constants_activity_test.rb +30 -0
- data/test/app_test_methods.rb +31 -26
- data/test/broadcast_receiver_test.rb +3 -1
- data/test/ruboto_gen_test.rb +4 -4
- data/test/test_helper.rb +5 -2
- metadata +18 -38
- data/assets/src/ruboto.rb +0 -25
- data/assets/src/ruboto/legacy.rb +0 -220
- data/assets/src/ruboto/menu.rb +0 -88
- data/lib/java_class_gen/InheritingClass.java.erb +0 -10
- data/test/block_def_activity/image_button_activity.rb +0 -23
- data/test/block_def_activity/image_button_activity_test.rb +0 -21
- data/test/block_def_activity/image_button_and_button_activity.rb +0 -20
- data/test/block_def_activity/image_button_and_button_activity_test.rb +0 -27
- data/test/block_def_activity/margins_activity.rb +0 -18
- data/test/block_def_activity/margins_activity_test.rb +0 -25
- data/test/block_def_activity/option_menu_activity.rb +0 -26
- data/test/block_def_activity/option_menu_activity_test.rb +0 -17
- data/test/block_def_activity/psych_activity.rb +0 -35
- data/test/block_def_activity/psych_activity_test.rb +0 -16
- data/test/block_def_activity/stack_activity.rb +0 -25
- data/test/block_def_activity/stack_activity_test.rb +0 -39
- data/test/handle_activity/image_button_activity.rb +0 -21
- data/test/handle_activity/image_button_activity_test.rb +0 -21
- data/test/handle_activity/image_button_and_button_activity.rb +0 -24
- data/test/handle_activity/image_button_and_button_activity_test.rb +0 -27
- data/test/handle_activity/margins_activity.rb +0 -15
- data/test/handle_activity/margins_activity_test.rb +0 -25
- data/test/handle_activity/option_menu_activity.rb +0 -25
- data/test/handle_activity/option_menu_activity_test.rb +0 -20
- data/test/handle_activity/psych_activity.rb +0 -31
- data/test/handle_activity/psych_activity_test.rb +0 -16
- data/test/handle_activity/stack_activity.rb +0 -24
- data/test/handle_activity/stack_activity_test.rb +0 -47
- data/test/view_constants_test.rb +0 -103
data/assets/src/ruboto.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
#######################################################
|
2
|
-
#
|
3
|
-
# ruboto.rb
|
4
|
-
#
|
5
|
-
# - Wrapper for using RubotoActivity, RubotoService, and
|
6
|
-
# RubotoBroadcastReceiver.
|
7
|
-
# - Provides interface for generating UI elements.
|
8
|
-
# - Imports and configures callback classes.
|
9
|
-
#
|
10
|
-
# require this script for legacy support or require
|
11
|
-
# the individual script files.
|
12
|
-
#
|
13
|
-
#######################################################
|
14
|
-
|
15
|
-
require 'ruboto/base'
|
16
|
-
require 'ruboto/package'
|
17
|
-
require 'ruboto/activity'
|
18
|
-
require 'ruboto/service'
|
19
|
-
require 'ruboto/broadcast_receiver'
|
20
|
-
|
21
|
-
require 'ruboto/widget'
|
22
|
-
require 'ruboto/menu'
|
23
|
-
require 'ruboto/util/stack'
|
24
|
-
require 'ruboto/util/toast'
|
25
|
-
require 'ruboto/legacy'
|
data/assets/src/ruboto/legacy.rb
DELETED
@@ -1,220 +0,0 @@
|
|
1
|
-
require 'ruboto/activity'
|
2
|
-
|
3
|
-
#######################################################
|
4
|
-
#
|
5
|
-
# ruboto/legacy.rb
|
6
|
-
#
|
7
|
-
# Required for backwards compatibility. The goal
|
8
|
-
# should be to run scripts without this.
|
9
|
-
#
|
10
|
-
#######################################################
|
11
|
-
|
12
|
-
#
|
13
|
-
# Old handle methods
|
14
|
-
#
|
15
|
-
|
16
|
-
module Ruboto
|
17
|
-
module Callbacks
|
18
|
-
def method_missing(name, *args, &block)
|
19
|
-
if name.to_s =~ /^handle_(.*)/ && self.class.respond_to?(:const_get) && (const = self.class.const_get("CB_#{$1.upcase}"))
|
20
|
-
scriptInfo.setCallbackProc(const, block)
|
21
|
-
self
|
22
|
-
else
|
23
|
-
super
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def respond_to?(name)
|
28
|
-
return true if name.to_s =~ /^handle_(.*)/ && self.class.respond_to?(:const_get) && self.class.const_get("CB_#{$1.upcase}")
|
29
|
-
super
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize_handlers(&block)
|
33
|
-
instance_eval &block
|
34
|
-
self
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
#
|
40
|
-
# Old handle_create for Activities
|
41
|
-
#
|
42
|
-
|
43
|
-
module Ruboto
|
44
|
-
module Activity
|
45
|
-
def handle_finish_create &block
|
46
|
-
@finish_create_block = block
|
47
|
-
end
|
48
|
-
|
49
|
-
def setup_content &block
|
50
|
-
@view_parent = nil
|
51
|
-
@content_view_block = block
|
52
|
-
end
|
53
|
-
|
54
|
-
def handle_create(&block)
|
55
|
-
$new_context_global = "$activity"
|
56
|
-
instance_exec &block
|
57
|
-
initialize_ruboto
|
58
|
-
on_create nil
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
RubotoActivity.class_eval do
|
64
|
-
def on_create(bundle)
|
65
|
-
@view_parent = nil
|
66
|
-
setContentView(instance_eval &@content_view_block) if @content_view_block
|
67
|
-
instance_eval { @finish_create_block.call } if @finish_create_block
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
#
|
72
|
-
# Allow IRB legacy
|
73
|
-
#
|
74
|
-
|
75
|
-
if $package_name == "org.ruboto.irb"
|
76
|
-
Java::org.ruboto.irb.IRB.class_eval do
|
77
|
-
def handle_create(&block)
|
78
|
-
start_ruboto_activity "$activity", RubotoActivity, nil, &block
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
#
|
84
|
-
# Legacy Service Subclass Setup
|
85
|
-
#
|
86
|
-
|
87
|
-
module Ruboto
|
88
|
-
module Service
|
89
|
-
def handle_create(&block)
|
90
|
-
$new_context_global = "$service"
|
91
|
-
instance_exec &block
|
92
|
-
initialize_ruboto
|
93
|
-
on_create
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
#
|
99
|
-
# Legacy BroadcastReceiver Subclass Setup
|
100
|
-
#
|
101
|
-
|
102
|
-
module Ruboto
|
103
|
-
module BroadcastReceiver
|
104
|
-
def handle_receive(&block)
|
105
|
-
instance_exec &block
|
106
|
-
on_receive($context, nil)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
#
|
112
|
-
# Allows RubotoActivity to handle callbacks covering Class based handlers
|
113
|
-
#
|
114
|
-
|
115
|
-
def ruboto_register_handler(unique_name, for_class, method_name)
|
116
|
-
unless RubotoActivity.method_defined? "#{unique_name}_handler"
|
117
|
-
RubotoActivity.class_eval "
|
118
|
-
def #{unique_name}_handler
|
119
|
-
@#{unique_name}_handler
|
120
|
-
end
|
121
|
-
|
122
|
-
def handle_#{unique_name}(&block)
|
123
|
-
@#{unique_name}_handler = block
|
124
|
-
self
|
125
|
-
end
|
126
|
-
"
|
127
|
-
end
|
128
|
-
|
129
|
-
unless for_class.method_defined? "orig_#{method_name}"
|
130
|
-
for_class.class_eval "
|
131
|
-
alias_method :orig_#{method_name}, :#{method_name}
|
132
|
-
def #{method_name}(handler)
|
133
|
-
orig_#{method_name}(handler.kind_of?(RubotoActivity) ? handler.#{unique_name}_handler : handler)
|
134
|
-
end
|
135
|
-
"
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def setup_button
|
140
|
-
Button.class_eval do
|
141
|
-
def configure(context, params = {})
|
142
|
-
setOnClickListener(context)
|
143
|
-
super(context, params)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
ruboto_register_handler("click", Button, "setOnClickListener")
|
148
|
-
end
|
149
|
-
|
150
|
-
def setup_image_button
|
151
|
-
ImageButton.class_eval do
|
152
|
-
def configure(context, params = {})
|
153
|
-
setOnClickListener(context)
|
154
|
-
super(context, params)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
ruboto_register_handler("click", ImageButton, "setOnClickListener")
|
159
|
-
end
|
160
|
-
|
161
|
-
def setup_list_view
|
162
|
-
Java::android.widget.ListView.class_eval do
|
163
|
-
attr_reader :adapter, :adapter_list
|
164
|
-
|
165
|
-
def configure(context, params = {})
|
166
|
-
if params.has_key? :list
|
167
|
-
@adapter_list = Java::java.util.ArrayList.new
|
168
|
-
@adapter_list.addAll(params[:list])
|
169
|
-
item_layout = params.delete(:item_layout) || R::layout::simple_list_item_1
|
170
|
-
@adapter = Java::android.widget.ArrayAdapter.new(context, item_layout, @adapter_list)
|
171
|
-
setAdapter @adapter
|
172
|
-
params.delete :list
|
173
|
-
end
|
174
|
-
if params.has_key? :adapter
|
175
|
-
@adapter = params[:adapter]
|
176
|
-
end
|
177
|
-
setOnItemClickListener(context) # legacy
|
178
|
-
super(context, params)
|
179
|
-
end
|
180
|
-
|
181
|
-
def reload_list(list)
|
182
|
-
@adapter_list.clear
|
183
|
-
@adapter_list.addAll(list)
|
184
|
-
@adapter.notifyDataSetChanged
|
185
|
-
invalidate
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
ruboto_register_handler("item_click", Java::android.widget.ListView, "setOnItemClickListener") # legacy
|
190
|
-
end
|
191
|
-
|
192
|
-
def setup_spinner
|
193
|
-
Java::android.widget.Spinner.class_eval do
|
194
|
-
attr_reader :adapter, :adapter_list
|
195
|
-
|
196
|
-
def configure(context, params = {})
|
197
|
-
if params.has_key? :list
|
198
|
-
@adapter_list = Java::java.util.ArrayList.new
|
199
|
-
@adapter_list.addAll(params[:list])
|
200
|
-
item_layout = params.delete(:item_layout) || R::layout::simple_spinner_item
|
201
|
-
@adapter = Java::android.widget.ArrayAdapter.new(context, item_layout, @adapter_list)
|
202
|
-
@adapter.setDropDownViewResource(params.delete(:dropdown_layout) || R::layout::simple_spinner_dropdown_item)
|
203
|
-
setAdapter @adapter
|
204
|
-
params.delete :list
|
205
|
-
end
|
206
|
-
setOnItemSelectedListener(context) # legacy
|
207
|
-
super(context, params)
|
208
|
-
end
|
209
|
-
|
210
|
-
def reload_list(list)
|
211
|
-
@adapter.clear
|
212
|
-
@adapter.addAll(list)
|
213
|
-
@adapter.notifyDataSetChanged
|
214
|
-
invalidate
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
ruboto_register_handler("item_selected", Java::android.widget.Spinner, "setOnItemSelectedListener") # legacy
|
219
|
-
end
|
220
|
-
|
data/assets/src/ruboto/menu.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'ruboto/activity'
|
2
|
-
|
3
|
-
#######################################################
|
4
|
-
#
|
5
|
-
# ruboto/menu.rb
|
6
|
-
#
|
7
|
-
# Make using menus a little easier. This is still using
|
8
|
-
# handle methods and may be moved into legacy code.
|
9
|
-
#
|
10
|
-
#######################################################
|
11
|
-
|
12
|
-
module Ruboto
|
13
|
-
module Activity
|
14
|
-
#
|
15
|
-
# Option Menus
|
16
|
-
#
|
17
|
-
def add_menu title, icon=nil, &block
|
18
|
-
mi = @menu.add(title)
|
19
|
-
mi.setIcon(icon) if icon
|
20
|
-
mi.class.class_eval { attr_accessor :on_click }
|
21
|
-
mi.on_click = block
|
22
|
-
|
23
|
-
# Seems to be needed or the block might get cleaned up
|
24
|
-
@all_menu_items = [] unless @all_menu_items
|
25
|
-
@all_menu_items << mi
|
26
|
-
end
|
27
|
-
|
28
|
-
def handle_create_options_menu &block
|
29
|
-
p = Proc.new do |*args|
|
30
|
-
@menu = args[0]
|
31
|
-
instance_eval { block.call(*args) } if block
|
32
|
-
end
|
33
|
-
scriptInfo.setCallbackProc(self.class.const_get("CB_CREATE_OPTIONS_MENU"), p)
|
34
|
-
|
35
|
-
p = Proc.new do |num, menu_item|
|
36
|
-
# handles a problem where this is called for context items
|
37
|
-
# TODO(uwe): Remove check for SDK version when we stop supporting api level < 11
|
38
|
-
unless @just_processed_context_item == menu_item || (android.os.Build::VERSION::SDK_INT >= 11 && menu_item.item_id == AndroidIds.home)
|
39
|
-
instance_eval &(menu_item.on_click)
|
40
|
-
@just_processed_context_item = nil
|
41
|
-
true
|
42
|
-
else
|
43
|
-
false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
scriptInfo.setCallbackProc(self.class.const_get("CB_MENU_ITEM_SELECTED"), p)
|
47
|
-
end
|
48
|
-
|
49
|
-
#
|
50
|
-
# Context Menus
|
51
|
-
#
|
52
|
-
|
53
|
-
def add_context_menu title, &block
|
54
|
-
mi = @context_menu.add(title)
|
55
|
-
mi.class.class_eval { attr_accessor :on_click }
|
56
|
-
mi.on_click = block
|
57
|
-
|
58
|
-
# Seems to be needed or the block might get cleaned up
|
59
|
-
@all_menu_items = [] unless @all_menu_items
|
60
|
-
@all_menu_items << mi
|
61
|
-
end
|
62
|
-
|
63
|
-
def handle_create_context_menu &block
|
64
|
-
p = Proc.new do |*args|
|
65
|
-
@context_menu = args[0]
|
66
|
-
instance_eval { block.call(*args) } if block
|
67
|
-
end
|
68
|
-
scriptInfo.setCallbackProc(self.class.const_get("CB_CREATE_CONTEXT_MENU"), p)
|
69
|
-
|
70
|
-
p = Proc.new do |menu_item|
|
71
|
-
if menu_item.on_click
|
72
|
-
arg = menu_item
|
73
|
-
begin
|
74
|
-
arg = menu_item.getMenuInfo.position
|
75
|
-
rescue
|
76
|
-
end
|
77
|
-
instance_eval { menu_item.on_click.call(arg) }
|
78
|
-
@just_processed_context_item = menu_item
|
79
|
-
true
|
80
|
-
else
|
81
|
-
false
|
82
|
-
end
|
83
|
-
end
|
84
|
-
scriptInfo.setCallbackProc(self.class.const_get("CB_CONTEXT_ITEM_SELECTED"), p)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
@@ -1,10 +0,0 @@
|
|
1
|
-
package THE_PACKAGE;
|
2
|
-
|
3
|
-
public class Inheriting<%= @class %> extends org.ruboto.Ruboto<%= @class %> {
|
4
|
-
% v = @callbacks[@full_class][@first_method]
|
5
|
-
public <%= "#{v["return_type"]} #{v["interface_method"]}(#{v["args_with_types"] })" %> {
|
6
|
-
setScriptName("start.rb");
|
7
|
-
super.<%= @first_method %>(<%= v["args_alone"].join(',') %>);
|
8
|
-
}
|
9
|
-
|
10
|
-
}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'ruboto/activity'
|
2
|
-
require 'ruboto/widget'
|
3
|
-
require 'ruboto/util/toast'
|
4
|
-
|
5
|
-
ruboto_import_widgets :ImageButton, :LinearLayout, :TextView
|
6
|
-
|
7
|
-
$activity.start_ruboto_activity do
|
8
|
-
setTitle File.basename(__FILE__).chomp('_activity.rb').split('_').map { |s| "#{s[0..0].upcase}#{s[1..-1]}" }.join(' ')
|
9
|
-
|
10
|
-
def on_create(bundle)
|
11
|
-
click_handler = proc do |view|
|
12
|
-
@text_view.setText 'What hath Matz wrought!'
|
13
|
-
toast 'Flipped a bit via butterfly'
|
14
|
-
end
|
15
|
-
|
16
|
-
self.content_view =
|
17
|
-
linear_layout :orientation => LinearLayout::VERTICAL do
|
18
|
-
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42
|
19
|
-
image_button :image_resource => $package.R::drawable::get_ruboto_core, :width => :wrap_content, :id => 43,
|
20
|
-
:on_click_listener => click_handler
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
activity Java::org.ruboto.test_app.ImageButtonActivity
|
2
|
-
|
3
|
-
setup do |activity|
|
4
|
-
start = Time.now
|
5
|
-
loop do
|
6
|
-
@text_view = activity.findViewById(42)
|
7
|
-
break if @text_view || (Time.now - start > 60)
|
8
|
-
sleep 1
|
9
|
-
end
|
10
|
-
assert @text_view
|
11
|
-
end
|
12
|
-
|
13
|
-
test('initial setup') do |activity|
|
14
|
-
assert_equal "What hath Matz wrought?", @text_view.text
|
15
|
-
end
|
16
|
-
|
17
|
-
test('button changes text') do |activity|
|
18
|
-
button = activity.findViewById(43)
|
19
|
-
button.performClick
|
20
|
-
assert_equal "What hath Matz wrought!", @text_view.text
|
21
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'ruboto/activity'
|
2
|
-
require 'ruboto/widget'
|
3
|
-
require 'ruboto/util/toast'
|
4
|
-
|
5
|
-
ruboto_import_widgets :Button, :ImageButton, :LinearLayout, :TextView
|
6
|
-
|
7
|
-
$activity.start_ruboto_activity do
|
8
|
-
setTitle File.basename(__FILE__).chomp('_activity.rb').split('_').map { |s| "#{s[0..0].upcase}#{s[1..-1]}" }.join(' ')
|
9
|
-
|
10
|
-
def on_create(bundle)
|
11
|
-
self.content_view =
|
12
|
-
linear_layout :orientation => LinearLayout::VERTICAL do
|
13
|
-
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42
|
14
|
-
button :text => 'Button', :width => :wrap_content, :id => 44,
|
15
|
-
:on_click_listener => proc { @text_view.text = 'Button pressed' }
|
16
|
-
image_button :image_resource => $package.R::drawable::get_ruboto_core, :width => :wrap_content, :id => 43,
|
17
|
-
:on_click_listener => proc { @text_view.text = 'Image button pressed' }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
activity Java::org.ruboto.test_app.ImageButtonAndButtonActivity
|
2
|
-
|
3
|
-
setup do |activity|
|
4
|
-
start = Time.now
|
5
|
-
loop do
|
6
|
-
@text_view = activity.find_view_by_id 42
|
7
|
-
break if @text_view || (Time.now - start > 60)
|
8
|
-
sleep 1
|
9
|
-
end
|
10
|
-
assert @text_view
|
11
|
-
end
|
12
|
-
|
13
|
-
test('initial setup') do |activity|
|
14
|
-
assert_equal "What hath Matz wrought?", @text_view.text
|
15
|
-
end
|
16
|
-
|
17
|
-
test('button changes text') do |activity|
|
18
|
-
button = activity.find_view_by_id 44
|
19
|
-
button.perform_click
|
20
|
-
assert_equal 'Button pressed', @text_view.text
|
21
|
-
end
|
22
|
-
|
23
|
-
test('image button changes text') do |activity|
|
24
|
-
image_button = activity.find_view_by_id 43
|
25
|
-
image_button.perform_click
|
26
|
-
assert_equal 'Image button pressed', @text_view.text
|
27
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'ruboto/activity'
|
2
|
-
require 'ruboto/widget'
|
3
|
-
|
4
|
-
ruboto_import_widgets :LinearLayout, :TextView
|
5
|
-
|
6
|
-
$activity.start_ruboto_activity do
|
7
|
-
setTitle File.basename(__FILE__).chomp('_activity.rb').split('_').map { |s| "#{s[0..0].upcase}#{s[1..-1]}" }.join(' ')
|
8
|
-
|
9
|
-
def on_create(bundle)
|
10
|
-
self.content_view =
|
11
|
-
linear_layout :orientation => LinearLayout::VERTICAL do
|
12
|
-
@text_view_margins = text_view :text => 'What hath Matz wrought?', :id => 42, :margins => [100,0,0,0]
|
13
|
-
@text_view_layout = text_view :text => 'What hath Matz wrought?', :id => 43, :layout => {:set_margins => [100,0,0,0]}
|
14
|
-
@text_view_fieldset = text_view :text => 'What hath Matz wrought?', :id => 44, :layout => {:left_margin= => 100}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|