cura 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +25 -11
  3. data/Gemfile.lock +157 -62
  4. data/Rakefile +71 -18
  5. data/examples/todo_list/bin/todo_list +4 -1
  6. data/examples/todo_list/lib/todo_list/component/list_items.rb +27 -27
  7. data/examples/todo_list/lib/todo_list/component/lists.rb +27 -27
  8. data/lib/cura/application.rb +3 -0
  9. data/lib/cura/attributes/has_children.rb +25 -4
  10. data/lib/cura/attributes/has_colors.rb +7 -3
  11. data/lib/cura/attributes/has_dimensions.rb +1 -1
  12. data/lib/cura/attributes/has_events.rb +1 -1
  13. data/lib/cura/attributes/has_root.rb +8 -3
  14. data/lib/cura/attributes/has_visibility.rb +28 -0
  15. data/lib/cura/color.rb +2 -0
  16. data/lib/cura/component/base.rb +34 -9
  17. data/lib/cura/component/group.rb +19 -2
  18. data/lib/cura/component/listbox.rb +15 -4
  19. data/lib/cura/component/pack.rb +8 -4
  20. data/lib/cura/component.rb +23 -0
  21. data/lib/cura/error/invalid_component.rb +1 -1
  22. data/lib/cura/event/dispatcher.rb +1 -1
  23. data/lib/cura/event/middleware/aimer/target_option.rb +1 -3
  24. data/lib/cura/event/middleware/dispatch.rb +3 -2
  25. data/lib/cura/event/middleware/translator/mouse_click.rb +1 -1
  26. data/lib/cura/key.rb +12 -12
  27. data/lib/cura/version.rb +1 -1
  28. data/spec/spec_helper.rb +0 -1
  29. data/spec/{cura → unit/cura}/attributes/has_ancestry_spec.rb +0 -0
  30. data/spec/{cura → unit/cura}/attributes/has_application_spec.rb +0 -0
  31. data/spec/{cura → unit/cura}/attributes/has_attributes_spec.rb +0 -0
  32. data/spec/{cura → unit/cura}/attributes/has_children_spec.rb +0 -0
  33. data/spec/{cura → unit/cura}/attributes/has_colors_spec.rb +0 -0
  34. data/spec/{cura → unit/cura}/attributes/has_coordinates_spec.rb +0 -0
  35. data/spec/{cura → unit/cura}/attributes/has_dimensions_spec.rb +0 -0
  36. data/spec/{cura → unit/cura}/attributes/has_events_spec.rb +0 -0
  37. data/spec/{cura → unit/cura}/attributes/has_focusability_spec.rb +0 -0
  38. data/spec/{cura → unit/cura}/attributes/has_offsets_spec.rb +0 -0
  39. data/spec/{cura → unit/cura}/attributes/has_orientation_spec.rb +0 -0
  40. data/spec/{cura → unit/cura}/attributes/has_relative_coordinates_spec.rb +0 -0
  41. data/spec/{cura → unit/cura}/attributes/has_side_attributes_spec.rb +0 -0
  42. metadata +43 -51
  43. data/examples/box_model/debug.log +0 -0
  44. data/examples/todo_list/app.log +0 -9
  45. data/examples/todo_list/data.db +0 -0
  46. data/examples/todo_list/debug.log +0 -0
  47. data/examples/todo_list/profile.html +0 -11354
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58ffd768a7cabdd176ee4d6063ce373aa1fb47a8
4
- data.tar.gz: 8afa76729e3f1b62abc326be6a371905760caaa8
3
+ metadata.gz: 101932a48d4c3d660f5360f3a92f997504b9f1e2
4
+ data.tar.gz: b2fbda7185993831bd53cd6786bd49984cd9a224
5
5
  SHA512:
6
- metadata.gz: ca3650bc0c20a6fd526a44ed4f1e89cadcbe5f21e30889078eaa1d0ffcfad999791e91629041bd90d217905182c03bea1ec4f7cce6fb2704807ca1a086105dd0
7
- data.tar.gz: 8538379553f3090dad61c27d2f99569260106547d793a070ea48a3ee4b1a16bc61cc752f347bfc90e49ce3ef3859fa26031f3d917e35be5de1f9969fc2e3ff3e
6
+ metadata.gz: d7911a0fefeab097a3f83a7270add610a84595ea1b87f5deb24d387ab0a391e39176dd24a17ec71a3f3a10efb5f50be6390b8e98716ba9170529fcdae3b56e5d
7
+ data.tar.gz: 5063b2f4e90fc3d0b851463015fe2c513d15fb898b47c9d4ded0a2f7aea5cc6f0199583ea5e8bff20afbc206a0cf37e28393bb8bf28d98d96024fb90f839ce0d
data/Gemfile CHANGED
@@ -1,15 +1,29 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ gemspec
4
+
3
5
  group :development do
4
- gem "fuubar", "~> 2.0.0"
5
- gem "mutant-rspec", "~> 0.8.0"
6
- gem "rake", "~> 10.4.2"
7
- gem "reek", "~> 3.0.4"
8
- gem "rspec", "~> 3.3.0"
9
- gem "rubocop", "~> 0.32.1"
10
- gem "ruby-prof", "~> 0.15.8"
11
- gem "simplecov-json", "~> 0.2"
12
- gem "simplecov", "~> 0.10.0"
13
- gem "yard", "~> 0.8.7.6"
14
- gem "yardstick", "~> 0.9.9"
6
+ gem "rake" # Project tasks
7
+ gem "rspec" # BDD Testing
8
+ gem "fuubar" # RSpec formatter
9
+ gem "mutant-rspec" # RSpec mutation testing
10
+ gem "reek" # Code smell analyzer
11
+ gem "rubocop" # Static code analyzer
12
+ gem "ruby-prof" # Code profiler # TODO: No guard or rake. For use in integration tests.
13
+ gem "simplecov" # Test coverage # TODO: No guard or rake. For use in integration tests.
14
+ gem "yard" # Code documentation
15
+ gem "yardstick" # Documentation coverage
16
+ gem "redcarpet" # Markdown parser (for markdown within documentation)
17
+ gem "github-markup" # Github Flavored Markdown (GFM) parsing
18
+ gem "guard" # Filesystem event watching
19
+
20
+ gem "guard-bundler"
21
+ gem "guard-shell"
22
+ gem "guard-rake"
23
+ gem "guard-rspec"
24
+ # gem "guard-mutant" # TODO: Broken, custom guard
25
+ gem "guard-reek"
26
+ gem "guard-rubocop"
27
+ gem "guard-yard"
28
+ gem "guard-yardstick"
15
29
  end
data/Gemfile.lock CHANGED
@@ -1,3 +1,8 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cura (0.0.3)
5
+
1
6
  GEM
2
7
  remote: https://rubygems.org/
3
8
  specs:
@@ -5,102 +10,177 @@ GEM
5
10
  adamantium (0.2.0)
6
11
  ice_nine (~> 0.11.0)
7
12
  memoizable (~> 0.4.0)
8
- anima (0.2.0)
13
+ anima (0.3.0)
9
14
  abstract_type (~> 0.0.7)
10
- adamantium (~> 0.1)
11
- equalizer (~> 0.0.8)
12
- ast (2.0.0)
13
- astrolabe (1.3.1)
14
- parser (~> 2.2)
15
+ adamantium (~> 0.2)
16
+ equalizer (~> 0.0.11)
17
+ ast (2.2.0)
18
+ axiom-types (0.1.1)
19
+ descendants_tracker (~> 0.0.4)
20
+ ice_nine (~> 0.11.0)
21
+ thread_safe (~> 0.3, >= 0.3.1)
22
+ builder (3.2.2)
23
+ codeclimate-engine-rb (0.3.1)
24
+ virtus (~> 1.0)
25
+ coderay (1.1.1)
26
+ coercible (1.0.0)
27
+ descendants_tracker (~> 0.0.1)
15
28
  concord (0.1.5)
16
29
  adamantium (~> 0.2.0)
17
30
  equalizer (~> 0.0.9)
31
+ descendants_tracker (0.0.4)
32
+ thread_safe (~> 0.3, >= 0.3.1)
18
33
  diff-lcs (1.2.5)
19
34
  docile (1.1.5)
20
35
  equalizer (0.0.11)
36
+ ffi (1.9.10)
37
+ formatador (0.2.5)
21
38
  fuubar (2.0.0)
22
39
  rspec (~> 3.0)
23
40
  ruby-progressbar (~> 1.4)
24
- ice_nine (0.11.1)
41
+ github-markup (1.4.0)
42
+ guard (2.13.0)
43
+ formatador (>= 0.2.4)
44
+ listen (>= 2.7, <= 4.0)
45
+ lumberjack (~> 1.0)
46
+ nenv (~> 0.1)
47
+ notiffany (~> 0.0)
48
+ pry (>= 0.9.12)
49
+ shellany (~> 0.0)
50
+ thor (>= 0.18.1)
51
+ guard-bundler (2.1.0)
52
+ bundler (~> 1.0)
53
+ guard (~> 2.2)
54
+ guard-compat (~> 1.1)
55
+ guard-compat (1.2.1)
56
+ guard-rake (1.0.0)
57
+ guard
58
+ rake
59
+ guard-reek (0.0.4)
60
+ guard
61
+ reek
62
+ guard-rspec (4.6.5)
63
+ guard (~> 2.1)
64
+ guard-compat (~> 1.1)
65
+ rspec (>= 2.99.0, < 4.0)
66
+ guard-rubocop (1.2.0)
67
+ guard (~> 2.0)
68
+ rubocop (~> 0.20)
69
+ guard-shell (0.7.1)
70
+ guard (>= 2.0.0)
71
+ guard-compat (~> 1.0)
72
+ guard-yard (2.1.4)
73
+ guard (>= 1.1.0)
74
+ yard (>= 0.7.0)
75
+ guard-yardstick (0.1.0)
76
+ guard (>= 2.0)
77
+ guard-compat (>= 1.2)
78
+ yardstick (>= 0.9)
79
+ ice_nine (0.11.2)
25
80
  json (1.8.3)
81
+ listen (3.1.4)
82
+ rb-fsevent (~> 0.9, >= 0.9.4)
83
+ rb-inotify (~> 0.9, >= 0.9.7)
84
+ ruby_dep (~> 1.2)
85
+ lumberjack (1.0.10)
26
86
  memoizable (0.4.2)
27
87
  thread_safe (~> 0.3, >= 0.3.1)
28
- morpher (0.2.3)
88
+ method_source (0.8.2)
89
+ morpher (0.2.6)
29
90
  abstract_type (~> 0.0.7)
30
91
  adamantium (~> 0.2.0)
31
- anima (~> 0.2.0)
32
- ast (~> 2.0.0)
33
- concord (~> 0.1.4)
92
+ anima (~> 0.3.0)
93
+ ast (~> 2.2)
94
+ concord (~> 0.1.5)
34
95
  equalizer (~> 0.0.9)
35
96
  ice_nine (~> 0.11.0)
36
97
  procto (~> 0.0.2)
37
- mutant (0.8.0)
98
+ mutant (0.8.10)
38
99
  abstract_type (~> 0.0.7)
39
100
  adamantium (~> 0.2.0)
40
- anima (~> 0.2.0)
41
- ast (~> 2.0)
101
+ anima (~> 0.3.0)
102
+ ast (~> 2.2)
42
103
  concord (~> 0.1.5)
43
104
  diff-lcs (~> 1.2)
44
105
  equalizer (~> 0.0.9)
45
106
  ice_nine (~> 0.11.1)
46
107
  memoizable (~> 0.4.2)
47
- morpher (~> 0.2.3)
108
+ morpher (~> 0.2.6)
48
109
  parallel (~> 1.3)
49
- parser (~> 2.2.2)
110
+ parser (~> 2.3.0)
50
111
  procto (~> 0.0.2)
51
- unparser (~> 0.2.4)
52
- mutant-rspec (0.8.0)
53
- mutant (~> 0.8.0)
54
- rspec-core (>= 3.2.0, < 3.4.0)
55
- parallel (1.6.0)
56
- parser (2.2.2.6)
57
- ast (>= 1.1, < 3.0)
112
+ unparser (~> 0.2.5)
113
+ mutant-rspec (0.8.8)
114
+ mutant (~> 0.8.8)
115
+ rspec-core (>= 3.2.0, < 3.5.0)
116
+ nenv (0.3.0)
117
+ notiffany (0.0.8)
118
+ nenv (~> 0.1)
119
+ shellany (~> 0.0)
120
+ parallel (1.8.0)
121
+ parser (2.3.0.7)
122
+ ast (~> 2.2)
58
123
  powerpack (0.1.1)
59
- procto (0.0.2)
60
- rainbow (2.0.0)
61
- rake (10.4.2)
62
- reek (3.0.4)
63
- parser (~> 2.2.2.5)
124
+ procto (0.0.3)
125
+ pry (0.10.3)
126
+ coderay (~> 1.1.0)
127
+ method_source (~> 0.8.1)
128
+ slop (~> 3.4)
129
+ rainbow (2.1.0)
130
+ rake (11.1.2)
131
+ rb-fsevent (0.9.7)
132
+ rb-inotify (0.9.7)
133
+ ffi (>= 0.5.0)
134
+ redcarpet (3.3.4)
135
+ reek (4.0.1)
136
+ codeclimate-engine-rb (~> 0.3.1)
137
+ parser (~> 2.3, >= 2.3.0.6)
64
138
  rainbow (~> 2.0)
65
- unparser (~> 0.2.2)
66
- rspec (3.3.0)
67
- rspec-core (~> 3.3.0)
68
- rspec-expectations (~> 3.3.0)
69
- rspec-mocks (~> 3.3.0)
70
- rspec-core (3.3.1)
71
- rspec-support (~> 3.3.0)
72
- rspec-expectations (3.3.0)
139
+ rspec (3.4.0)
140
+ rspec-core (~> 3.4.0)
141
+ rspec-expectations (~> 3.4.0)
142
+ rspec-mocks (~> 3.4.0)
143
+ rspec-core (3.4.4)
144
+ rspec-support (~> 3.4.0)
145
+ rspec-expectations (3.4.0)
73
146
  diff-lcs (>= 1.2.0, < 2.0)
74
- rspec-support (~> 3.3.0)
75
- rspec-mocks (3.3.1)
147
+ rspec-support (~> 3.4.0)
148
+ rspec-mocks (3.4.1)
76
149
  diff-lcs (>= 1.2.0, < 2.0)
77
- rspec-support (~> 3.3.0)
78
- rspec-support (3.3.0)
79
- rubocop (0.32.1)
80
- astrolabe (~> 1.3)
81
- parser (>= 2.2.2.5, < 3.0)
150
+ rspec-support (~> 3.4.0)
151
+ rspec-support (3.4.1)
152
+ rubocop (0.39.0)
153
+ parser (>= 2.3.0.7, < 3.0)
82
154
  powerpack (~> 0.1)
83
155
  rainbow (>= 1.99.1, < 3.0)
84
- ruby-progressbar (~> 1.4)
85
- ruby-prof (0.15.8)
156
+ ruby-progressbar (~> 1.7)
157
+ unicode-display_width (~> 1.0, >= 1.0.1)
158
+ ruby-prof (0.15.9)
86
159
  ruby-progressbar (1.7.5)
87
- simplecov (0.10.0)
160
+ ruby_dep (1.3.1)
161
+ shellany (0.0.1)
162
+ simplecov (0.11.2)
88
163
  docile (~> 1.1.0)
89
164
  json (~> 1.8)
90
165
  simplecov-html (~> 0.10.0)
91
166
  simplecov-html (0.10.0)
92
- simplecov-json (0.2)
93
- json
94
- simplecov
167
+ slop (3.6.0)
168
+ thor (0.19.1)
95
169
  thread_safe (0.3.5)
96
- unparser (0.2.4)
170
+ unicode-display_width (1.0.3)
171
+ unparser (0.2.5)
97
172
  abstract_type (~> 0.0.7)
98
173
  adamantium (~> 0.2.0)
99
174
  concord (~> 0.1.5)
100
175
  diff-lcs (~> 1.2.5)
101
176
  equalizer (~> 0.0.9)
102
- parser (~> 2.2.2)
177
+ parser (~> 2.3.0)
103
178
  procto (~> 0.0.2)
179
+ virtus (1.0.5)
180
+ axiom-types (~> 0.1)
181
+ coercible (~> 1.0)
182
+ descendants_tracker (~> 0.0, >= 0.0.3)
183
+ equalizer (~> 0.0, >= 0.0.9)
104
184
  yard (0.8.7.6)
105
185
  yardstick (0.9.9)
106
186
  yard (~> 0.8, >= 0.8.7.2)
@@ -109,14 +189,29 @@ PLATFORMS
109
189
  ruby
110
190
 
111
191
  DEPENDENCIES
112
- fuubar (~> 2.0.0)
113
- mutant-rspec (~> 0.8.0)
114
- rake (~> 10.4.2)
115
- reek (~> 3.0.4)
116
- rspec (~> 3.3.0)
117
- rubocop (~> 0.32.1)
118
- ruby-prof (~> 0.15.8)
119
- simplecov (~> 0.10.0)
120
- simplecov-json (~> 0.2)
121
- yard (~> 0.8.7.6)
122
- yardstick (~> 0.9.9)
192
+ builder (~> 3.2.2)
193
+ cura!
194
+ fuubar
195
+ github-markup
196
+ guard
197
+ guard-bundler
198
+ guard-rake
199
+ guard-reek
200
+ guard-rspec
201
+ guard-rubocop
202
+ guard-shell
203
+ guard-yard
204
+ guard-yardstick
205
+ mutant-rspec
206
+ rake
207
+ redcarpet
208
+ reek
209
+ rspec
210
+ rubocop
211
+ ruby-prof
212
+ simplecov
213
+ yard
214
+ yardstick
215
+
216
+ BUNDLED WITH
217
+ 1.12.2
data/Rakefile CHANGED
@@ -1,42 +1,95 @@
1
+ # Package task
2
+
1
3
  require "pathname"
2
4
  require "rubygems/package_task"
3
- require "yard"
4
- require "rspec/core/rake_task"
5
- require "rubocop/rake_task"
6
- require "reek/rake/task"
7
- require "yardstick/rake/measurement"
8
- require "yardstick/rake/verify"
9
5
 
10
- gemspec = Pathname.glob(Pathname.new(__FILE__).join("..", "*.gemspec")).first
6
+ PROJECT_ROOT = Pathname.new(__FILE__).join("..").expand_path
7
+
8
+ gemspec = Pathname.glob(PROJECT_ROOT.join("*.gemspec")).first
11
9
  spec = Gem::Specification.load(gemspec.to_s)
12
10
 
13
11
  Gem::PackageTask.new(spec) do |task|
14
12
  task.need_zip = false
15
13
  end
16
14
 
17
- YARD::Rake::YardocTask.new
15
+ # RSpec
16
+
17
+ require "rspec/core/rake_task"
18
18
 
19
19
  RSpec::Core::RakeTask.new(:spec)
20
20
 
21
- RuboCop::RakeTask.new do |task|
22
- task.patterns = ["lib/**/*.rb"]
23
- task.formatters = ["fuubar"]
21
+ # Mutant
22
+
23
+ desc "Mutation testing"
24
+ task :mutant do
25
+ exec("bundle exec mutant --include lib --require cura --use rspec Cura*")
24
26
  end
25
27
 
28
+ # Reek
29
+
30
+ require "reek/rake/task"
31
+
26
32
  Reek::Rake::Task.new do |t|
27
33
  t.fail_on_error = false
28
34
  end
29
35
 
36
+ # Rubocop
37
+
38
+ require "rubocop/rake_task"
39
+
40
+ RuboCop::RakeTask.new do |task|
41
+ task.patterns = ["lib/**/*.rb"]
42
+ # task.formatters = ["fuubar"]
43
+ end
44
+
45
+ # YARD
46
+
47
+ require "yard"
48
+
49
+ YARD::Rake::YardocTask.new
50
+
51
+ # Yardstick
52
+
53
+ require "yardstick/rake/measurement"
54
+ require "yardstick/rake/verify"
55
+
30
56
  options = YAML.load_file(".yardstick.yml")
31
57
  Yardstick::Rake::Measurement.new(:yardstick, options) do |measurement|
32
- measurement.output = "coverage/yard.txt"
58
+ measurement.output = PROJECT_ROOT.join("doc", "yard", "coverage.txt")
33
59
  end
34
60
 
35
- # Yardstick::Rake::Verify.new do |verify|
36
- # verify.threshold = 100
37
- # end
61
+ Yardstick::Rake::Verify.new do |verify|
62
+ verify.threshold = 100
63
+ end
38
64
 
39
- desc "Mutation testing"
40
- task :mutant do
41
- exec("mutant --include lib --require cura --use rspec Cura*")
65
+ # Graphs
66
+
67
+ namespace :graph do
68
+ desc "Generate YARD dot file"
69
+ task :yard do
70
+ path = PROJECT_ROOT.join("doc", "graphs", "yard.dot").relative_path_from(PROJECT_ROOT)
71
+
72
+ sh("bundle exec yard graph --full --file #{path}")
73
+ end
74
+
75
+ desc "Generate png files from dot files"
76
+ task :png do
77
+ renders_path = PROJECT_ROOT.join("doc", "graphs", "renders")
78
+ renders_path.mkpath
79
+
80
+ glob_query = PROJECT_ROOT.join("doc", "graphs", "*.dot")
81
+
82
+ Pathname.glob(glob_query).each do |input_path|
83
+ output_filename = "#{input_path.basename(".dot")}.png"
84
+ output_path = renders_path.join(output_filename)
85
+
86
+ sh("dot -T png \"#{input_path}\" -o \"#{output_path}\"")
87
+ end
88
+ end
89
+ end
90
+
91
+ desc "Generate all graphs"
92
+ task :graph do
93
+ Rake::Task["graph:yard"].execute
94
+ Rake::Task["graph:png"].execute
42
95
  end
@@ -20,7 +20,10 @@ if profile
20
20
  result = RubyProf.stop
21
21
  printer = RubyProf::CallStackPrinter.new(result)
22
22
 
23
- Pathname.new(__FILE__).join("..", "..", "profile.html").expand_path.open("w+") { |file| printer.print(file) }
23
+ path = Pathname.new(__FILE__).join("..", "..", "..", "..", "doc", "coverage", "todo_list.html").expand_path
24
+ path.dirname.mkpath
25
+
26
+ path.open("w+") { |file| printer.print(file) }
24
27
  else
25
28
  TodoList.run
26
29
  end
@@ -2,34 +2,34 @@ require "todo_list/component/list_item"
2
2
 
3
3
  module TodoList
4
4
  module Component
5
-
5
+
6
6
  class ListItems < Cura::Component::Pack
7
-
7
+
8
8
  attr_reader :create_list_item_textbox
9
9
  attr_reader :listbox
10
10
  attr_reader :list
11
-
11
+
12
12
  def initialize(attributes={})
13
13
  attributes = { fill: true, padding: { top: 1, bottom: 1 } }.merge(attributes)
14
-
14
+
15
15
  super(attributes)
16
-
16
+
17
17
  create_form_pack = Cura::Component::Pack.new(orientation: :horizontal)
18
18
  add_child(create_form_pack)
19
-
19
+
20
20
  @create_list_item_textbox = Cura::Component::Textbox.new(width: width - 21, margin: { right: 1 })
21
21
  @create_list_item_textbox.on_event(:key_down, self) { |event, model_list| model_list.create_list_item if event.name == :enter }
22
22
  create_form_pack.add_child(@create_list_item_textbox)
23
-
23
+
24
24
  @create_list_item_button = Cura::Component::Button.new(text: "Create List Item", padding: { left: 1, right: 1 })
25
25
  @create_list_item_button.on_event(:click, self) { |_, model_list| model_list.create_list_item }
26
26
  create_form_pack.add_child(@create_list_item_button)
27
-
27
+
28
28
  @listbox_header_label = Cura::Component::Label.new(text: " " * width, bold: true, underline: true, margin: { top: 1 })
29
29
  add_child(@listbox_header_label)
30
-
30
+
31
31
  @listbox = Cura::Component::Listbox.new(width: @width)
32
-
32
+
33
33
  @listbox.on_event(:key_down, self) do |event, model_list|
34
34
  if event.target == self
35
35
  if event.control? && event.name == :D && !selected_object.nil?
@@ -40,58 +40,58 @@ module TodoList
40
40
  model_list.fill_listbox
41
41
  self.selected_index = [previous_selected_index, count - 1].min
42
42
  end
43
-
43
+
44
44
  if event.control? && event.name == :E
45
45
  selected_child.focusable = true
46
46
  selected_child.focus
47
47
  end
48
-
48
+
49
49
  if event.name == :enter
50
50
  selected_object.completed = !selected_object.completed
51
51
  selected_object.save
52
52
  end
53
53
  end
54
54
  end
55
-
55
+
56
56
  add_child(@listbox)
57
57
  end
58
-
58
+
59
59
  def create_list_item
60
60
  text = @create_list_item_textbox.text
61
-
61
+
62
62
  @list.add_list_item(text: text)
63
-
63
+
64
64
  fill_listbox
65
-
65
+
66
66
  @create_list_item_textbox.clear
67
67
  @create_list_item_textbox.focus
68
68
  end
69
-
69
+
70
70
  def fill_listbox
71
71
  @listbox.delete_children
72
-
72
+
73
73
  return nil if @list.nil?
74
-
74
+
75
75
  @list.list_items.each do |list_item|
76
76
  list_item_component = Component::ListItem.new(listbox: @listbox, model: list_item, width: @listbox.width)
77
-
78
- @listbox.add_child(list_item_component, list_item)
77
+
78
+ @listbox.add_child(list_item_component, object: list_item)
79
79
  end unless @list.nil?
80
80
  end
81
-
81
+
82
82
  def list=(list)
83
83
  @list = list
84
-
84
+
85
85
  if @list.nil?
86
86
  @listbox_header_label.text = " " * width
87
87
  else
88
88
  @listbox_header_label.text = @list.text + " " * (width - @list.text.length) unless @list.text.length >= width
89
89
  end
90
-
90
+
91
91
  fill_listbox
92
92
  end
93
-
93
+
94
94
  end
95
-
95
+
96
96
  end
97
97
  end