glimmer 0.1.5.470 → 0.1.8.470
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.
- 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
|
+
[](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
|
|