mittens_ui 0.0.6 → 0.0.10

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile +3 -1
  4. data/Gemfile.lock +5 -2
  5. data/LICENSE +21 -0
  6. data/README.md +82 -17
  7. data/examples/app.rb +102 -6
  8. data/examples/assets/gnome_logo.png +0 -0
  9. data/examples/assets/mittens_ui_preview.gif +0 -0
  10. data/examples/contacts.rb +75 -0
  11. data/lib/mittens_ui.rb +33 -60
  12. data/lib/mittens_ui/alert.rb +32 -0
  13. data/lib/mittens_ui/assets/icon.png +0 -0
  14. data/lib/mittens_ui/assets/mittens_ui_preview.gif +0 -0
  15. data/lib/mittens_ui/button.rb +29 -0
  16. data/lib/mittens_ui/checkbox.rb +24 -0
  17. data/lib/mittens_ui/core.rb +34 -0
  18. data/lib/mittens_ui/file_picker.rb +29 -0
  19. data/lib/mittens_ui/grid.rb +29 -0
  20. data/lib/mittens_ui/hbox.rb +56 -0
  21. data/lib/mittens_ui/header_bar.rb +48 -0
  22. data/lib/mittens_ui/helpers.rb +27 -0
  23. data/lib/mittens_ui/image.rb +46 -0
  24. data/lib/mittens_ui/label.rb +19 -0
  25. data/lib/mittens_ui/listbox.rb +47 -0
  26. data/lib/mittens_ui/loader.rb +35 -0
  27. data/lib/mittens_ui/slider.rb +32 -0
  28. data/lib/mittens_ui/switch.rb +36 -0
  29. data/lib/mittens_ui/table_view.rb +179 -0
  30. data/lib/mittens_ui/textbox.rb +31 -0
  31. data/lib/mittens_ui/version.rb +1 -1
  32. data/lib/mittens_ui/web_link.rb +22 -0
  33. data/mittens_ui.gemspec +3 -3
  34. data/notes/dev_setup.txt +14 -0
  35. metadata +33 -15
  36. data/examples/brightness_controller.rb +0 -64
  37. data/lib/mittens_ui/layouts/box.rb +0 -38
  38. data/lib/mittens_ui/layouts/grid.rb +0 -31
  39. data/lib/mittens_ui/widgets/alert.rb +0 -33
  40. data/lib/mittens_ui/widgets/button.rb +0 -34
  41. data/lib/mittens_ui/widgets/label.rb +0 -41
  42. data/lib/mittens_ui/widgets/listbox.rb +0 -45
  43. data/lib/mittens_ui/widgets/slider.rb +0 -32
  44. data/lib/mittens_ui/widgets/textbox.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4f5d25f3b7c96a792bc79fcaacc9fd9b564cd42bd25b0eb019ee890cf8e7645
4
- data.tar.gz: 3d498df47afc937af7cb7995c7789703189e9a32b05548bd8617c6894fffd802
3
+ metadata.gz: bb39340bda7c9c473ade8a1cfa92300cd87f6fdd29e96431507b0fc21133a6a7
4
+ data.tar.gz: 3ed7082dfca8a2475e6d86bae2bb36e5740464044bc6d67ce140b3de00eb4d8c
5
5
  SHA512:
6
- metadata.gz: b12928f2e7228a6d8c871ba3a8c3ba952db166695a05d71408f527ce59b7a84769015a6033c6b92ab04afc4a3f82316e9567fba0190a197c65c52202f8249266
7
- data.tar.gz: 967a5b3b12549407e0afd26a31dafae1498b5a345e4b664f17162ef169c73847d9a449bcbe38e5ce577693f8d9f526504565fe42481887d4419f6b1a7fcae433
6
+ metadata.gz: 5a47bf32490fb765cb9084bdb6aea8ca5fba19b572d81cc321c1cd56e13c45cc317f39f99bf63834a867f513817a02000e5819379501f0a3a36334f02d458aeb
7
+ data.tar.gz: 54149cd2b1f4d2d3d45ea434e244a746de45226bea12597d6166f31ae2b127208ad848d630d859297ecf70a32fac568fbfd356d8d1eb8776609550c96547dc32
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.0.0
data/Gemfile CHANGED
@@ -1,9 +1,11 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ ruby "3.0.2"
4
+
3
5
  # Specify your gem's dependencies in mittens_ui.gemspec
4
6
  gemspec
5
7
 
6
8
  gem "rake", "~> 12.0"
7
9
  gem "rake-compiler"
8
10
  gem "rspec", "~> 3.0"
9
- gem "gtk3"
11
+ gem "gtk3"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mittens_ui (0.0.5)
4
+ mittens_ui (0.0.9)
5
5
  gtk3
6
6
 
7
7
  GEM
@@ -67,5 +67,8 @@ DEPENDENCIES
67
67
  rake-compiler
68
68
  rspec (~> 3.0)
69
69
 
70
+ RUBY VERSION
71
+ ruby 3.0.2p107
72
+
70
73
  BUNDLED WITH
71
- 2.1.4
74
+ 2.2.22
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Zach Tuttle
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -4,6 +4,8 @@ This is a small vertical stacking GUI toolkit inspired by Ruby Shoes and built o
4
4
  around GTK. The goal of this project is make creating GUIs in Ruby dead simple
5
5
  without the UI framework/library getting your way.
6
6
 
7
+ ![alt_text](https://github.com/tuttza/mittens_ui/blob/51e84d7c50282e3f2c856aa9e65fe3ed28b117ff/lib/mittens_ui/assets/mittens_ui_preview.gif "MittensUi Preview")
8
+
7
9
  ## Installation
8
10
 
9
11
  Add this line to your application's Gemfile:
@@ -26,38 +28,101 @@ Or install it yourself as:
26
28
  require 'mittens_ui'
27
29
 
28
30
  app_options = {
29
- name: "say_hello",
30
- title: "Say Hello!",
31
- height: 450,
32
- width: 350,
31
+ name: "contacts",
32
+ title: "Contacts",
33
+ height: 615,
34
+ width: 570,
35
+ can_resize: true
36
+ }.freeze
37
+
38
+
39
+ require '../lib/mittens_ui'
40
+
41
+ app_options = {
42
+ name: "contacts",
43
+ title: "Contacts",
44
+ height: 615,
45
+ width: 570,
33
46
  can_resize: true
34
47
  }.freeze
35
48
 
49
+
36
50
  MittensUi::Application.Window(app_options) do
37
- MittensUi::Label("Enter Name:", top: 30)
51
+ add_contact_button = MittensUi::Button.new(title: "Add")
52
+ remove_contact_button = MittensUi::Button.new(title: "Remove")
53
+
54
+ buttons = [ add_contact_button, remove_contact_button ]
55
+
56
+ MittensUi::HeaderBar.new(buttons.map(&:render), title: "Contacts", position: :left).render
38
57
 
39
- text_box = MittensUi::Textbox(can_edit: true)
58
+ table_view_options = {
59
+ headers: ["Name", "Address", "Phone #"],
60
+ data: [
61
+ [ "John Appleseed", "123 abc st.", "111-555-3333"],
62
+ [ "Jane Doe", "122 abc st.", "111-555-4444" ],
63
+ [ "Bobby Jones", "434 bfef ave.", "442-333-1342"],
64
+ [ "Sara Akigawa", "777 tyo ave.", "932-333-1325"],
65
+ ],
66
+ top: 20
67
+ }
68
+
69
+ contacts_table = MittensUi::TableView.new(table_view_options).render
40
70
 
41
- listbox_options = {
42
- top: 10,
43
- items: ["item_1", "item_2", "item_3"]
44
- }.freeze
71
+ # FORM
72
+ MittensUi::Label.new("Add Contact", top: 30).render
45
73
 
46
- listbox = MittensUi::ListBox(listbox_options)
74
+ name_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Name...")
75
+ addr_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Address...")
76
+ phne_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Phone #...")
47
77
 
48
- btn = MittensUi::Button(title: "Click Here")
49
- btn.click {|_b| MittensUi::Alert("Hello #{text_box.text} AND! #{listbox.selected_value} was selected.") }
78
+ tb_list = [name_tb, addr_tb, phne_tb].map(&:render).freeze
50
79
 
51
- s = MittensUi::Slider({ start_value: 1, stop_value: 100, initial_value: 30 })
52
- s.slide { |s| puts s.value }
80
+ MittensUi::HBox.new(tb_list, spacing: 10).render
81
+
82
+ # ACTONS
83
+
84
+ add_contact_button.click do |_b|
85
+ if tb_list.map { |tb| tb.text.length > 0 }.all?
86
+ contacts_table.add(tb_list.map {|tb| tb.text })
87
+ tb_list.map {|tb| tb.clear }
88
+ end
89
+ end
90
+
91
+ remove_contact_button.click do |btn|
92
+ removed = contacts_table.remove_selected
93
+
94
+ if removed.size > 0
95
+ MittensUi::Alert.new("#{removed[0]} was removed.").render
96
+ end
97
+ end
98
+
99
+ contacts_table.row_clicked do |data|
100
+ msg = <<~MSG
101
+ Contact Info:
102
+
103
+ Name: #{data[0]}
104
+ Address: #{data[1]}
105
+ Phone #: #{data[2]}
106
+ MSG
107
+
108
+ MittensUi::Alert.new(msg).render
109
+ end
53
110
  end
111
+
54
112
  ```
55
113
 
56
114
  ## Development
57
115
 
58
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
116
+ Simply fork and clone this repo to your machine, cd into it and run `bundle install`.
117
+
118
+ This does require GTK ruby gem which requires `gtk` native dependencies to be complied and installed on your system.
119
+
120
+ #### Fedora
121
+ Using dnf:
122
+ * `$ sudo dnf install ruby ruby-devel cairo cairo-devel gtk3-devel`
59
123
 
60
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
124
+ #### Ubuntu
125
+ * `sudo apt install build-essential git sqlite3 libsqlite3-dev lib-gtk-3 libcairo2-dev`
61
126
 
62
127
  ## Contributing
63
128
 
data/examples/app.rb CHANGED
@@ -1,20 +1,26 @@
1
1
  require '../lib/mittens_ui'
2
2
 
3
3
  app_options = {
4
- name: "say_hello",
5
- title: "Say Hello!",
6
- height: 450,
7
- width: 350,
4
+ name: "hello_world",
5
+ title: "Hello World App!",
6
+ height: 650,
7
+ width: 550,
8
8
  can_resize: true
9
9
  }.freeze
10
10
 
11
11
  MittensUi::Application.Window(app_options) do
12
+
13
+ MittensUi::HeaderBar([
14
+ MittensUi::Button(title: "headerbar button"),
15
+ MittensUi::CheckBox(label: "Checkbox")
16
+ ], title: "Demo App", position: :left) {}
17
+
12
18
  MittensUi::Label("Enter Name:", top: 30)
13
19
 
14
20
  text_box = MittensUi::Textbox(can_edit: true)
15
21
 
16
22
  listbox_options = {
17
- top: 10,
23
+ top: 10,
18
24
  items: ["item_1", "item_2", "item_3"]
19
25
  }.freeze
20
26
 
@@ -25,4 +31,94 @@ MittensUi::Application.Window(app_options) do
25
31
 
26
32
  s = MittensUi::Slider({ start_value: 1, stop_value: 100, initial_value: 30 })
27
33
  s.slide { |s| puts s.value }
28
- end
34
+
35
+ img_opts = {
36
+ tooltip_text: "The Gnome LOGO!",
37
+ width: 200,
38
+ height: 200,
39
+ left: 20
40
+ }.freeze
41
+
42
+ img = MittensUi::Image("./assets/gnome_logo.png", img_opts)
43
+
44
+ img2 = MittensUi::Image("./assets/mittens_ui_preview.gif", img_opts)
45
+
46
+ switch = MittensUi::Switch(left: 220 )
47
+
48
+ img.click do
49
+ unless switch.hidden?
50
+ switch.show
51
+ else
52
+ switch.hide
53
+ end
54
+ end
55
+
56
+ switch.on do
57
+ unless img.hidden?
58
+ img.show
59
+ else
60
+ img.hide
61
+ end
62
+ end
63
+
64
+ cb = MittensUi::CheckBox(label: "Enable")
65
+ cb.value = "Some Value"
66
+ cb.toggle { puts "checkbox was toggled! associated value: #{cb.value}" }
67
+
68
+ link = MittensUi::WebLink("YouTube", "https://www.youtube.com", left: 200)
69
+
70
+ MittensUi::Label("Contact Info (use delimiter: ',')", top: 30)
71
+ contact_tb = MittensUi::Textbox(can_edit: true)
72
+
73
+ table_view_options = {
74
+ headers: ["Name", "Address", "Phone #"],
75
+ data: [
76
+ [ "John Appleseed", "123 abc st.", "111-555-3333"],
77
+ [ "Jane Doe", "122 abc st.", "111-555-4444" ],
78
+ [ "Bobby Jones", "434 bfef ave.", "442-333-1342"],
79
+ ],
80
+ }
81
+
82
+ table = MittensUi::TableView(table_view_options)
83
+ table.add(["Sara Akigawa", "777 tyo ave.", "932-333-1325"], :prepend)
84
+
85
+ add_ct = MittensUi::Button(title: "Add Contact")
86
+ add_ct.click {|_b| table.add(contact_tb.text.split(",")); contact_tb.clear; puts "Row Count: #{table.row_count}" }
87
+
88
+ table.row_clicked { |row| puts row.inspect }
89
+
90
+ remove_ct = MittensUi::Button(title: "Remove Contact")
91
+ remove_ct.click { |btn| table.remove_selected }
92
+
93
+ MittensUi::Shutdown() do
94
+ puts "quitting...."
95
+ end
96
+
97
+ open_file_picker = MittensUi::Button(title: "Choose File")
98
+
99
+ open_file_picker.click do
100
+ picked_file_path = MittensUi::FilePicker()
101
+ puts picked_file_path.inspect
102
+ open_file_picker.remove
103
+ end
104
+
105
+ start_loader = MittensUi::Button(title: "Start Loader")
106
+
107
+ loader = MittensUi::Loader()
108
+
109
+ start_loader.click do
110
+ loader.start {
111
+ puts "Doing some work..."
112
+ num = 0
113
+ 100.times do
114
+ num += 1
115
+ puts num
116
+ sleep 0.2
117
+ end
118
+
119
+ start_loader.remove
120
+ }
121
+ end
122
+
123
+ end
124
+
Binary file
@@ -0,0 +1,75 @@
1
+ require '../lib/mittens_ui'
2
+
3
+ app_options = {
4
+ name: "contacts",
5
+ title: "Contacts",
6
+ height: 615,
7
+ width: 570,
8
+ can_resize: true
9
+ }.freeze
10
+
11
+
12
+ MittensUi::Application.Window(app_options) do
13
+ add_contact_button = MittensUi::Button.new(title: "Add")
14
+ remove_contact_button = MittensUi::Button.new(title: "Remove")
15
+
16
+ buttons = [ add_contact_button, remove_contact_button ]
17
+
18
+ MittensUi::HeaderBar.new(buttons.map(&:render), title: "Contacts", position: :left).render
19
+
20
+ table_view_options = {
21
+ headers: ["Name", "Address", "Phone #"],
22
+ data: [
23
+ [ "John Appleseed", "123 abc st.", "111-555-3333"],
24
+ [ "Jane Doe", "122 abc st.", "111-555-4444" ],
25
+ [ "Bobby Jones", "434 bfef ave.", "442-333-1342"],
26
+ [ "Sara Akigawa", "777 tyo ave.", "932-333-1325"],
27
+ ],
28
+ top: 20
29
+ }
30
+
31
+ contacts_table = MittensUi::TableView.new(table_view_options).render
32
+
33
+ # FORM
34
+ MittensUi::Label.new("Add Contact", top: 30).render
35
+
36
+ name_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Name...")
37
+ addr_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Address...")
38
+ phne_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Phone #...")
39
+
40
+ tb_list = [name_tb, addr_tb, phne_tb].map(&:render).freeze
41
+
42
+ MittensUi::HBox.new(tb_list, spacing: 10).render
43
+
44
+ fp = MittensUi::FilePicker.new
45
+
46
+ # ACTONS
47
+
48
+ add_contact_button.click do |_b|
49
+ if tb_list.map { |tb| tb.text.length > 0 }.all?
50
+ contacts_table.add(tb_list.map {|tb| tb.text })
51
+ tb_list.map {|tb| tb.clear }
52
+ puts "#{fp.render.path}"
53
+ end
54
+ end
55
+
56
+ remove_contact_button.click do |btn|
57
+ removed = contacts_table.remove_selected
58
+
59
+ if removed.size > 0
60
+ MittensUi::Alert.new("#{removed[0]} was removed.").render
61
+ end
62
+ end
63
+
64
+ contacts_table.row_clicked do |data|
65
+ msg = <<~MSG
66
+ Contact Info:
67
+
68
+ Name: #{data[0]}
69
+ Address: #{data[1]}
70
+ Phone #: #{data[2]}
71
+ MSG
72
+
73
+ MittensUi::Alert.new(msg).render
74
+ end
75
+ end
data/lib/mittens_ui.rb CHANGED
@@ -1,69 +1,60 @@
1
1
  require "mittens_ui/version"
2
- require "mittens_ui/widgets/alert"
3
- require "mittens_ui/widgets/label"
4
- require "mittens_ui/widgets/button"
5
- require "mittens_ui/widgets/textbox"
6
- require "mittens_ui/widgets/listbox"
7
- require "mittens_ui/widgets/slider"
2
+ require "mittens_ui/alert"
3
+ require "mittens_ui/label"
4
+ require "mittens_ui/button"
5
+ require "mittens_ui/textbox"
6
+ require "mittens_ui/listbox"
7
+ require "mittens_ui/slider"
8
+ require "mittens_ui/switch"
9
+ require "mittens_ui/image"
10
+ require "mittens_ui/checkbox"
11
+ require "mittens_ui/web_link"
12
+ require "mittens_ui/table_view"
13
+ require "mittens_ui/loader"
14
+ require "mittens_ui/header_bar"
15
+ require "mittens_ui/file_picker"
16
+ require "mittens_ui/hbox"
8
17
 
9
18
  require "gtk3"
10
19
 
11
20
  module MittensUi
12
-
13
21
  class Error < StandardError; end
14
22
 
15
- def self.Slider(options = {})
16
- MittensUi::Widgets::Slider.new(options)
17
- end
18
-
19
- def self.ListBox(options = {})
20
- MittensUi::Widgets::ListBox.new(options)
21
- end
22
-
23
- def self.Alert(message, options = {})
24
- MittensUi::Widgets::Alert.new(message, options)
25
- end
26
-
27
- def self.Label(text, options = {})
28
- MittensUi::Widgets::Label.new(text, options)
29
- end
30
-
31
- def self.Textbox(options = {})
32
- MittensUi::Widgets::Textbox.new(options)
33
- end
34
-
35
- def self.Button(options = {})
36
- MittensUi::Widgets::Button.new(options)
37
- end
38
-
39
- def self.RemoveWidget(widget)
40
- widget.remove
23
+ def self.Shutdown
24
+ $app_window.signal_connect("delete-event") do |_widget|
25
+ yield
26
+ end
41
27
  end
42
28
 
43
29
  class Application
44
30
  class << self
45
- def Window(options = {}, &block)
46
- init_gtk_application(options, block)
31
+ def Window(options = {}, &block)
32
+ init_gtk_application(options, &block)
47
33
  end
48
-
49
- private
34
+
35
+ private
50
36
 
51
37
  def set_process_name(name)
52
- # Doesn't work in MacOS Activity Monitor or Windows Task Manager. It shows up as "Ruby".
53
38
  Process.setproctitle(name)
54
39
  $PROGRAM_NAME = name
40
+ $0 = name
55
41
  end
56
42
 
57
- def init_gtk_application(options, block)
43
+ def init_gtk_application(options, &block)
58
44
  app_name = options[:name].nil? ? "mittens_ui_app" : options[:name]
59
45
  height = options[:height].nil? ? 600 : options[:height]
60
46
  width = options[:width].nil? ? 400 : options[:width]
61
47
  title = options[:title].nil? ? "Mittens App" : options[:title]
62
48
  can_resize = options[:can_resize].nil? ? true : options[:can_resize]
63
49
 
50
+ app_assets_path = File.join(File.expand_path(File.dirname(__FILE__)), "mittens_ui", "assets") + "/"
51
+ default_icon = app_assets_path + "icon.png"
52
+
53
+ app_icon = options[:icon].nil? ? default_icon : options[:icon]
54
+
64
55
  set_process_name(app_name)
65
56
 
66
- gtk_app_name = "org.gtk.mittens_ui.#{app_name}"
57
+ gtk_app_name = "org.mittens_ui.#{app_name}"
67
58
 
68
59
  app = Gtk::Application.new(gtk_app_name, :flags_none)
69
60
 
@@ -73,10 +64,11 @@ module MittensUi
73
64
  $vertical_box = Gtk::Box.new(:vertical, 10)
74
65
  scrolled_window.add($vertical_box)
75
66
  $app_window.add(scrolled_window)
76
- block.call($app_window, $vertical_box)
67
+ yield($app_window, $vertical_box)
77
68
  $app_window.set_size_request(width, height)
78
69
  $app_window.set_title(title)
79
70
  $app_window.set_resizable(can_resize)
71
+ $app_window.set_icon_from_file(app_icon)
80
72
  $app_window.show_all
81
73
  end
82
74
 
@@ -84,23 +76,4 @@ module MittensUi
84
76
  end
85
77
  end
86
78
  end
87
-
88
- class Job
89
- attr_reader :name, :status
90
-
91
- def initialize(name)
92
- @name = name
93
- @status = nil
94
- end
95
-
96
- def run(&block)
97
- job_t = Thread.new { |_t| yield }
98
- set_status(job_t)
99
- end
100
-
101
- private
102
- def set_status(thread)
103
- @status = thread.status
104
- end
105
- end
106
79
  end