glimmer 0.1.5.470 → 0.1.8.470
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/README.markdown +7 -2
- data/Rakefile +7 -8
- data/TODO.md +1 -1
- data/VERSION +1 -1
- data/bin/girb +3 -0
- data/bin/girb_runner.rb +5 -0
- data/glimmer.gemspec +29 -19
- data/lib/glimmer_application.rb +1 -2
- data/lib/shine.rb +23 -21
- data/lib/xml_command_handlers/models/node.rb +11 -11
- data/lib/xml_command_handlers/models/xml_visitor.rb +12 -12
- data/samples/tictactoe/tic_tac_toe.rb +11 -11
- data/spec/lib/command_handlers/models/observable_model_spec.rb +22 -0
- data/spec/lib/command_handlers/models/r_widget_spec.rb +52 -0
- data/{test/glimmer_combo_data_binding_test.rb → spec/lib/glimmer__combo_data_binding__spec.rb} +48 -49
- data/spec/lib/glimmer__constant__spec.rb +30 -0
- data/{test/glimmer_data_binding_test.rb → spec/lib/glimmer__data_binding__spec.rb} +95 -94
- data/spec/lib/glimmer__list_data_binding__spec.rb +224 -0
- data/{test/glimmer_listeners_test.rb → spec/lib/glimmer__listeners__spec.rb} +18 -19
- data/spec/lib/glimmer__shine_data_binding__spec.rb +89 -0
- data/spec/lib/glimmer__tab_item__spec.rb +55 -0
- data/spec/lib/glimmer__table_data_binding__spec.rb +121 -0
- data/spec/lib/glimmer_spec.rb +251 -0
- data/spec/lib/xml/glimmer_xml_spec.rb +154 -0
- data/spec/samples/contactmanager/contact_manager_presenter_spec.rb +81 -0
- data/spec/samples/tictactoe/tic_tac_toe_spec.rb +263 -0
- data/spec/spec_helper.rb +123 -0
- metadata +50 -17
- data/test/glimmer_constant_test.rb +0 -30
- data/test/glimmer_list_data_binding_test.rb +0 -223
- data/test/glimmer_shine_data_binding_test.rb +0 -89
- data/test/glimmer_tab_item_test.rb +0 -61
- data/test/glimmer_table_data_binding_test.rb +0 -122
- data/test/glimmer_test.rb +0 -237
- data/test/helper.rb +0 -24
- data/test/observable_model_test.rb +0 -25
- data/test/r_widget_test.rb +0 -52
- data/test/samples/contactmanager/contact_manager_presenter_test.rb +0 -81
- data/test/samples/tictactoe/tic_tac_toe_test.rb +0 -262
- data/test/xml/glimmer_xml_test.rb +0 -163
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33d1e6ed089bc7dd67eee706f264787cda60ebe2fc1c3fdf1697c277ff5adad4
|
4
|
+
data.tar.gz: 7c7b23d0827e273289502df018308c7ab383c6e7299e75c6da89a9034113af53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 917f8181c1085e246bca952bd4861974081a95486b415e7e6f6c1dcc465776b79ae02ad18b1071f40823c74fdc721186ae5d008a4e1cadd4da2a0da6db40136f
|
7
|
+
data.tar.gz: 2011b3eedcb1018624bdb872aef40f5900ba2892e680e5ec23cffd495fea4574fd34a66e9720263a343f4ae30e56a91adba5a87529fe9bcf50408cd0e2548c4d
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
repo_token: dvAuyH3RuZ3lslleCHAeovxv0kQpFdrsB
|
data/.rspec
ADDED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Glimmer (The Original One And Only)
|
2
|
+
[![Coverage Status](https://coveralls.io/repos/github/AndyObtiva/glimmer/badge.svg?branch=master)](https://coveralls.io/github/AndyObtiva/glimmer?branch=master)
|
2
3
|
|
3
4
|
Glimmer is a cross-platform Ruby desktop development library. Glimmer's main innovation is a JRuby DSL that enables easy and efficient authoring of desktop application user-interfaces while relying on the robust platform-independent Eclipse SWT library. Glimmer additionally innovates by having built-in desktop UI data-binding support to greatly facilitate synchronizing the UI with domain models. As a result, that achieves true decoupling of object oriented components, enabling developers to solve business problems without worrying about UI concerns, or alternatively drive development UI-first, and then write clean business components test-first afterward.
|
4
5
|
|
@@ -25,7 +26,7 @@ Please follow these instructions to make the `glimmer` command available on your
|
|
25
26
|
|
26
27
|
Add the following to `Gemfile`:
|
27
28
|
```
|
28
|
-
gem 'glimmer', '~> 0.1.
|
29
|
+
gem 'glimmer', '~> 0.1.8.470'
|
29
30
|
```
|
30
31
|
|
31
32
|
And, then run:
|
@@ -37,7 +38,7 @@ bundle install
|
|
37
38
|
|
38
39
|
Run this command to get directly:
|
39
40
|
```
|
40
|
-
gem install glimmer -v 0.1.
|
41
|
+
gem install glimmer -v 0.1.8.470
|
41
42
|
```
|
42
43
|
|
43
44
|
## Usage
|
@@ -55,6 +56,10 @@ It downloads and sets up the SWT jar whether missing or not.
|
|
55
56
|
Example 3: `glimmer --setup`
|
56
57
|
This downloads and sets up the SWT jar whether missing or not.
|
57
58
|
|
59
|
+
## Girb (Glimmer irb)
|
60
|
+
|
61
|
+
You may run girb instead of standard irb to have SWT preloaded and the Glimmer required and included for quick Glimmer coding/testing.
|
62
|
+
|
58
63
|
## Samples
|
59
64
|
|
60
65
|
Check the "samples" folder for examples on how to write Glimmer applications.
|
data/Rakefile
CHANGED
@@ -21,18 +21,17 @@ Jeweler::Tasks.new do |gem|
|
|
21
21
|
gem.description = %Q{JRuby DSL that enables easy and efficient authoring of user-interfaces using the robust platform-independent Eclipse SWT library}
|
22
22
|
gem.email = "andy.am@gmail.com"
|
23
23
|
gem.authors = ["AndyMaleh"]
|
24
|
-
gem.executables = ['glimmer']
|
24
|
+
gem.executables = ['glimmer', 'girb']
|
25
25
|
# dependencies defined in Gemfile
|
26
26
|
end
|
27
27
|
Jeweler::RubygemsDotOrgTasks.new
|
28
28
|
|
29
|
-
require '
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
test.verbose = true
|
29
|
+
require 'rspec/core'
|
30
|
+
require 'rspec/core/rake_task'
|
31
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
32
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
34
33
|
additional_options = OS.mac? ? "-J-XstartOnFirstThread" : ""
|
35
|
-
|
34
|
+
spec.ruby_opts = ["#{additional_options} -J-classpath \"#{GlimmerApplication::SWT_JAR_FILE}\" -Xcli.debug=true --debug"]
|
36
35
|
end
|
37
36
|
|
38
|
-
task :default => :
|
37
|
+
task :default => :spec
|
data/TODO.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8.470
|
data/bin/girb
ADDED
data/bin/girb_runner.rb
ADDED
data/glimmer.gemspec
CHANGED
@@ -2,24 +2,26 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: glimmer 0.1.
|
5
|
+
# stub: glimmer 0.1.8.470 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "glimmer".freeze
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.8.470"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["AndyMaleh".freeze]
|
14
|
-
s.date = "2017-07-
|
14
|
+
s.date = "2017-07-23"
|
15
15
|
s.description = "JRuby DSL that enables easy and efficient authoring of user-interfaces using the robust platform-independent Eclipse SWT library".freeze
|
16
16
|
s.email = "andy.am@gmail.com".freeze
|
17
|
-
s.executables = ["glimmer".freeze]
|
17
|
+
s.executables = ["glimmer".freeze, "girb".freeze]
|
18
18
|
s.extra_rdoc_files = [
|
19
19
|
"LICENSE.txt",
|
20
20
|
"README.markdown"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
|
+
".coveralls.yml",
|
24
|
+
".rspec",
|
23
25
|
".ruby-gemset",
|
24
26
|
".ruby-version",
|
25
27
|
"Gemfile",
|
@@ -28,6 +30,8 @@ Gem::Specification.new do |s|
|
|
28
30
|
"Rakefile",
|
29
31
|
"TODO.md",
|
30
32
|
"VERSION",
|
33
|
+
"bin/girb",
|
34
|
+
"bin/girb_runner.rb",
|
31
35
|
"bin/glimmer",
|
32
36
|
"glimmer.gemspec",
|
33
37
|
"images/Bitter-sweet.jpg",
|
@@ -87,21 +91,21 @@ Gem::Specification.new do |s|
|
|
87
91
|
"samples/login.rb",
|
88
92
|
"samples/tictactoe/tic_tac_toe.rb",
|
89
93
|
"samples/tictactoe/tic_tac_toe_board.rb",
|
90
|
-
"
|
91
|
-
"
|
92
|
-
"
|
93
|
-
"
|
94
|
-
"
|
95
|
-
"
|
96
|
-
"
|
97
|
-
"
|
98
|
-
"
|
99
|
-
"
|
100
|
-
"
|
101
|
-
"
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
94
|
+
"spec/lib/command_handlers/models/observable_model_spec.rb",
|
95
|
+
"spec/lib/command_handlers/models/r_widget_spec.rb",
|
96
|
+
"spec/lib/glimmer__combo_data_binding__spec.rb",
|
97
|
+
"spec/lib/glimmer__constant__spec.rb",
|
98
|
+
"spec/lib/glimmer__data_binding__spec.rb",
|
99
|
+
"spec/lib/glimmer__list_data_binding__spec.rb",
|
100
|
+
"spec/lib/glimmer__listeners__spec.rb",
|
101
|
+
"spec/lib/glimmer__shine_data_binding__spec.rb",
|
102
|
+
"spec/lib/glimmer__tab_item__spec.rb",
|
103
|
+
"spec/lib/glimmer__table_data_binding__spec.rb",
|
104
|
+
"spec/lib/glimmer_spec.rb",
|
105
|
+
"spec/lib/xml/glimmer_xml_spec.rb",
|
106
|
+
"spec/samples/contactmanager/contact_manager_presenter_spec.rb",
|
107
|
+
"spec/samples/tictactoe/tic_tac_toe_spec.rb",
|
108
|
+
"spec/spec_helper.rb"
|
105
109
|
]
|
106
110
|
s.homepage = "http://github.com/AndyObtiva/glimmer".freeze
|
107
111
|
s.licenses = ["MIT".freeze]
|
@@ -114,6 +118,8 @@ Gem::Specification.new do |s|
|
|
114
118
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
115
119
|
s.add_runtime_dependency(%q<facets>.freeze, ["= 3.1.0"])
|
116
120
|
s.add_runtime_dependency(%q<os>.freeze, ["= 1.0.0"])
|
121
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
|
122
|
+
s.add_development_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
117
123
|
s.add_development_dependency(%q<rdoc>.freeze, ["~> 2.3.0"])
|
118
124
|
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
119
125
|
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.0"])
|
@@ -123,6 +129,8 @@ Gem::Specification.new do |s|
|
|
123
129
|
else
|
124
130
|
s.add_dependency(%q<facets>.freeze, ["= 3.1.0"])
|
125
131
|
s.add_dependency(%q<os>.freeze, ["= 1.0.0"])
|
132
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
|
133
|
+
s.add_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
126
134
|
s.add_dependency(%q<rdoc>.freeze, ["~> 2.3.0"])
|
127
135
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
128
136
|
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.0"])
|
@@ -133,6 +141,8 @@ Gem::Specification.new do |s|
|
|
133
141
|
else
|
134
142
|
s.add_dependency(%q<facets>.freeze, ["= 3.1.0"])
|
135
143
|
s.add_dependency(%q<os>.freeze, ["= 1.0.0"])
|
144
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
|
145
|
+
s.add_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
136
146
|
s.add_dependency(%q<rdoc>.freeze, ["~> 2.3.0"])
|
137
147
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
138
148
|
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.0"])
|
data/lib/glimmer_application.rb
CHANGED
@@ -37,8 +37,7 @@ class GlimmerApplication
|
|
37
37
|
|
38
38
|
if application
|
39
39
|
puts "Starting Glimmer Application #{application}"
|
40
|
-
additional_options
|
41
|
-
`ruby #{additional_options} -J-classpath "#{SWT_JAR_FILE}" #{application}`
|
40
|
+
system "ruby #{additional_options} -J-classpath \"#{SWT_JAR_FILE}\" #{application}"
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
data/lib/shine.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
1
|
+
## NOTE: Unsupported in Ruby 2 syntax
|
2
|
+
#
|
3
|
+
# require File.dirname(__FILE__) + "/glimmer"
|
4
|
+
#
|
5
|
+
# class Array
|
6
|
+
# include Glimmer
|
7
|
+
#
|
8
|
+
# alias original_compare <=>
|
9
|
+
#
|
10
|
+
# def <=>(other)
|
11
|
+
# if (self[0].class.name == "RWidget")
|
12
|
+
# add_contents(self[0]) {
|
13
|
+
# if (other.size == 2)
|
14
|
+
# eval("#{self[1]} bind (other[0], other[1])")
|
15
|
+
# elsif (other.size == 3)
|
16
|
+
# eval("#{self[1]} bind (other[0], other[1], other[2])")
|
17
|
+
# end
|
18
|
+
# }
|
19
|
+
# else
|
20
|
+
# original_compare(other)
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
@@ -3,9 +3,9 @@ require File.dirname(__FILE__) + "/xml_visitor"
|
|
3
3
|
|
4
4
|
class Node
|
5
5
|
include Parent, Glimmer
|
6
|
-
|
6
|
+
|
7
7
|
attr_accessor :children, :name, :contents, :attributes, :is_name_space, :is_attribute, :name_space, :parent
|
8
|
-
|
8
|
+
|
9
9
|
def initialize(parent, name, attributes, &contents)
|
10
10
|
@is_name_space = false
|
11
11
|
@children = []
|
@@ -21,35 +21,35 @@ class Node
|
|
21
21
|
if @attributes
|
22
22
|
@attributes.each_key do |attribute|
|
23
23
|
if attribute.is_a?(Node)
|
24
|
-
attribute.is_attribute = true
|
24
|
+
attribute.is_attribute = true
|
25
25
|
attribute.parent.children.delete(attribute) if attribute.parent
|
26
26
|
attribute.parent = nil #attributes do not usually have parents
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
29
|
+
Glimmer.logger.debug(attributes)
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def method_missing(symbol, *args, &block)
|
34
34
|
@is_name_space = true
|
35
35
|
parent.children.delete(self) if parent
|
36
36
|
Glimmer.add_contents(self) {@tag = super}
|
37
37
|
@tag
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def to_xml
|
41
41
|
xml_visitor = XmlVisitor.new
|
42
42
|
DepthFirstSearchIterator.new(self, xml_visitor).iterate
|
43
43
|
xml_visitor.document
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def process_block(block)
|
47
47
|
return_value = block.call(@widget)
|
48
48
|
if return_value.is_a?(String) and !@children.include?(return_value)
|
49
49
|
text = return_value
|
50
50
|
first_match = text.match(/[#][^{]+[{][^}]+[}]/)
|
51
51
|
match = first_match
|
52
|
-
while (match)
|
52
|
+
while (match)
|
53
53
|
Glimmer.module_eval(text_command(match.pre_match))
|
54
54
|
tag_text = match.to_s
|
55
55
|
Glimmer.module_eval(rubyize(tag_text))
|
@@ -61,11 +61,11 @@ class Node
|
|
61
61
|
@children << return_value unless first_match
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def text_command(text)
|
66
66
|
"text \"#{text}\""
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def rubyize(text)
|
70
70
|
text = text.gsub(/[}]/, '"}')
|
71
71
|
text = text.gsub(/[{]/, '{"')
|
@@ -76,5 +76,5 @@ class Node
|
|
76
76
|
def id
|
77
77
|
method_missing(:id)
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/node_visitor"
|
2
2
|
|
3
3
|
class XmlVisitor < NodeVisitor
|
4
|
-
|
4
|
+
|
5
5
|
attr_reader :document
|
6
|
-
|
6
|
+
|
7
7
|
def initialize
|
8
8
|
@document = ""
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def process_before_children(node)
|
12
12
|
if (node.is_a?(String))
|
13
13
|
@document << node
|
@@ -17,27 +17,27 @@ class XmlVisitor < NodeVisitor
|
|
17
17
|
append_attributes(node) if node.attributes
|
18
18
|
end_open_tag(node)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def process_after_children(node)
|
22
22
|
return if (node.is_a?(String))
|
23
23
|
append_close_tag(node)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def begin_open_tag(node)
|
27
27
|
@document << "<"
|
28
28
|
@document << "#{node.name_space.name}:" if node.name_space
|
29
29
|
@document << node.name
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def end_open_tag(node)
|
33
|
-
if (node.contents)
|
33
|
+
if (node.contents)
|
34
34
|
@document << ">"
|
35
35
|
else
|
36
36
|
@document << " " if node.attributes.keys.size > 0
|
37
37
|
@document << "/>"
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def append_close_tag(node)
|
42
42
|
if (node.contents)
|
43
43
|
@document << "</"
|
@@ -45,15 +45,15 @@ class XmlVisitor < NodeVisitor
|
|
45
45
|
@document << "#{node.name}>"
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def append_attributes(node)
|
50
50
|
Glimmer.logger.debug "Take 3"
|
51
|
-
|
51
|
+
Glimmer.logger.debug(node.attributes)
|
52
52
|
node.attributes.each_key do |attribute|
|
53
53
|
attribute_name = attribute
|
54
54
|
attribute_name = "#{attribute.name_space.name}:#{attribute.name}" if attribute.is_a?(Node)
|
55
55
|
@document << " #{attribute_name}=\"#{node.attributes[attribute]}\""
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
59
|
-
end
|
58
|
+
|
59
|
+
end
|
@@ -3,20 +3,20 @@ require_relative "tic_tac_toe_board"
|
|
3
3
|
|
4
4
|
|
5
5
|
class TicTacToe
|
6
|
-
|
6
|
+
|
7
7
|
include_package 'org.eclipse.swt'
|
8
8
|
include_package 'org.eclipse.swt.widgets'
|
9
9
|
include_package 'org.eclipse.swt.layout'
|
10
|
-
|
10
|
+
|
11
11
|
include Glimmer
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@tic_tac_toe_board = TicTacToeBoard.new
|
15
|
-
@main =
|
15
|
+
@main =
|
16
16
|
@shell = shell {
|
17
17
|
text "Tic-Tac-Toe"
|
18
18
|
composite {
|
19
|
-
layout GridLayout.new(3,true)
|
19
|
+
layout GridLayout.new(3,true)
|
20
20
|
(1..3).each { |row_number|
|
21
21
|
(1..3).each { |column_number|
|
22
22
|
button {
|
@@ -34,20 +34,20 @@ class TicTacToe
|
|
34
34
|
@tic_tac_toe_board.extend(ObservableModel) #make board an observable model
|
35
35
|
@tic_tac_toe_board.add_observer("game_status", self)
|
36
36
|
end
|
37
|
-
|
38
|
-
def update(game_status)
|
37
|
+
|
38
|
+
def update(game_status)
|
39
39
|
display_win_message if game_status == TicTacToeBoard::WIN
|
40
40
|
display_draw_message if game_status == TicTacToeBoard::DRAW
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def display_win_message()
|
44
44
|
display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
def display_draw_message()
|
48
48
|
display_game_over_message("Draw!")
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
def display_game_over_message(message)
|
52
52
|
message_box = MessageBox.new(@shell.widget)
|
53
53
|
message_box.setText("Game Over")
|
@@ -55,9 +55,9 @@ class TicTacToe
|
|
55
55
|
message_box.open
|
56
56
|
@tic_tac_toe_board.reset
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
def open
|
60
|
-
|
60
|
+
@main.open
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|