ncumbra 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e2e982667f4938fcec8de0033c42123cef862f3a4ccdf605abfd509852949b2b
4
+ data.tar.gz: 259e0d105fbbae4bfa07d3470be80d726cee091de29447a7ae70a994b376c262
5
+ SHA512:
6
+ metadata.gz: e7ce64a554e6644cb8303da6bd76d2a837c8009231adf5c680acf4af3324ae3351a763fa96a66e9e554ca3dde008fe9b696ccce21a1831a0128bf7f30e4dceeb
7
+ data.tar.gz: 32acff4e2f0c371a512fd8258ad5f1d565b97f22b0af067ebbbcff5f8009bbb37c0f3e499f371680ae3a964eb43cad834903b300f750a53905e5eab14cb52081
data/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ bak
10
+ zbak
11
+ *.log
12
+ notes
13
+ bugs
14
+ t.t
15
+ *.tgz
16
+ *.zip
17
+ *.gz
18
+ *.t
19
+ *.1
20
+ todo
21
+ bug
22
+ *.gem
23
+ *.rbc
24
+ tmp.*
25
+ *.bak
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in umbra.gemspec
6
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 kepler
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 ADDED
@@ -0,0 +1,48 @@
1
+ # Umbra
2
+
3
+ stripped version of canis (ncurses ruby)
4
+
5
+ - Minimal functionality
6
+ - Very close to ncurses, should not try to wrap everything
7
+ - load only what you need
8
+ - not necessarily object oriented, that is not a goal
9
+ - should be able to use a file or widget from here without having to copy too much
10
+ - should be able to understand one file without having to understand entire library
11
+ - should be easy for others to change as per their needs, or copy parts.
12
+ -
13
+
14
+
15
+ Currently, not looking at ALT keys, this may change in the future. Only single and control keys and function keys trapped
16
+ ## Installation
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ ```ruby
21
+ gem 'umbra'
22
+ ```
23
+
24
+ And then execute:
25
+
26
+ $ bundle
27
+
28
+ Or install it yourself as:
29
+
30
+ $ gem install umbra
31
+
32
+ ## Usage
33
+
34
+ TODO: Write usage instructions here
35
+
36
+ ## Development
37
+
38
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
39
+
40
+ 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).
41
+
42
+ ## Contributing
43
+
44
+ Bug reports and pull requests are welcome on GitHub at https://github.com/mare-imbrium/umbra.
45
+
46
+ ## License
47
+
48
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/README.md.bak ADDED
@@ -0,0 +1,15 @@
1
+ # umbra
2
+
3
+ stripped version of canis (ncurses ruby)
4
+
5
+ - Minimal functionality
6
+ - Very close to ncurses, should not try to wrap everything
7
+ - load only what you need
8
+ - not necessarily object oriented, that is not a goal
9
+ - should be able to use a file or widget from here without having to copy too much
10
+ - should be able to understand one file without having to understand entire library
11
+ - should be easy for others to change as per their needs, or copy parts.
12
+ -
13
+
14
+
15
+ Currently, not looking at ALT keys, this may change in the future. Only single and control keys and function keys trapped
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "umbra"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/examples/ex1.rb ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby
2
+ # example showing only labels on a window
3
+ # 2018-03-10
4
+ require 'umbra'
5
+ require 'umbra/label'
6
+
7
+ def startup
8
+ require 'logger'
9
+ require 'date'
10
+
11
+ path = File.join(ENV["LOGDIR"] || "./" ,"v.log")
12
+ file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
13
+ $log = Logger.new(path)
14
+ $log.level = Logger::DEBUG
15
+ today = Date.today
16
+ $log.info "Started up on #{today}"
17
+ FFI::NCurses.init_pair(10, FFI::NCurses::BLACK, FFI::NCurses::GREEN) # statusline
18
+ end
19
+ def statusline win, str, col = 0
20
+ win.printstring( FFI::NCurses.LINES-1, col, str, 10)
21
+ end
22
+ begin
23
+ include Umbra
24
+ init_curses
25
+ startup
26
+ win = Window.new
27
+ statusline(win, " "*(win.width-0), 0)
28
+ statusline(win, "Press q to quit #{win.height}:#{win.width}", 20)
29
+ title = Label.new( :text => "Demo of Labels", :row => 0, :col => 0 , :width => FFI::NCurses.COLS-1,
30
+ :justify => :center, :color_pair => 0)
31
+
32
+ form = Form.new win
33
+ form.add_widget title
34
+ labels = ["Name: ", "Address: ","Mobile No.", "Email Id:","Hobbies: "]
35
+ labs = []
36
+ row = 3
37
+ col = 5
38
+ labels.each_with_index {|lab, ix|
39
+ w = Label.new( :text => lab, :row => row, :col => col )
40
+ labs << w
41
+ row += 2
42
+ w.color_pair = 1
43
+ w.attr = FFI::NCurses::A_BOLD
44
+ form.add_widget w
45
+ }
46
+ labels = ["Roger Federer", "20 Slam Drive","9810012345", "ihumble@tennis.com","golf, programming"]
47
+ row = 3
48
+ col = 30
49
+ labels.each_with_index {|lab, ix|
50
+ w = Label.new( :text => lab, :row => row, :col => col , :width => 50)
51
+ labs << w
52
+ row += 2
53
+ w.color_pair = 1
54
+ w.attr = FFI::NCurses::A_REVERSE
55
+ form.add_widget w
56
+ }
57
+ form.pack
58
+ win.wrefresh
59
+
60
+ y = x = 1
61
+ while (ch = win.getkey) != 113
62
+ #y, x = win.getbegyx(win.pointer)
63
+ old_y, old_x = y, x
64
+ case ch
65
+ when FFI::NCurses::KEY_RIGHT
66
+ when FFI::NCurses::KEY_LEFT
67
+ # go back higher level
68
+ when FFI::NCurses::KEY_UP
69
+ when FFI::NCurses::KEY_DOWN
70
+ end
71
+ #FIXME after scrolling, pointer is showing wrong file here
72
+ statusline(win, "Pressed #{ch} on ", 70)
73
+ win.wrefresh
74
+ end
75
+
76
+ rescue Object => e
77
+ @window.destroy if @window
78
+ FFI::NCurses.endwin
79
+ puts e
80
+ puts e.backtrace.join("\n")
81
+ ensure
82
+ @window.destroy if @window
83
+ FFI::NCurses.endwin
84
+ puts
85
+ end
data/examples/ex2.rb ADDED
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env ruby
2
+ # example showing only labels and fields a window
3
+ # 2018-03-10
4
+ require 'umbra'
5
+ require 'umbra/label'
6
+ require 'umbra/field'
7
+
8
+ def create_footer_window h = 2 , w = FFI::NCurses.COLS, t = FFI::NCurses.LINES-2, l = 0
9
+ ewin = Window.new(h, w , t, l)
10
+ end
11
+ def _alert str
12
+ win = create_footer_window
13
+ #FFI::NCurses.init_pair(12, COLOR_WHITE, FFI::NCurses::RED)
14
+ cp = create_color_pair(COLOR_RED, COLOR_WHITE)
15
+ win.wbkgd(FFI::NCurses.COLOR_PAIR(cp)) # white on red, defined here
16
+ win.printstring(0,1, str)
17
+ win.wrefresh
18
+ win.getkey
19
+ win.destroy
20
+ end
21
+ def startup
22
+ require 'logger'
23
+ require 'date'
24
+
25
+ path = File.join(ENV["LOGDIR"] || "./" ,"v.log")
26
+ file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
27
+ $log = Logger.new(path)
28
+ $log.level = Logger::DEBUG
29
+ today = Date.today
30
+ $log.info "Field demo #{$0} started on #{today}"
31
+ FFI::NCurses.init_pair(10, FFI::NCurses::BLACK, FFI::NCurses::GREEN) # statusline
32
+ end
33
+ def statusline win, str, col = 0
34
+ win.printstring( FFI::NCurses.LINES-1, col, str, 10)
35
+ end
36
+ begin
37
+ include Umbra
38
+ init_curses
39
+ startup
40
+ #FFI::NCurses.init_pair(12, COLOR_WHITE, FFI::NCurses::RED)
41
+ win = Window.new
42
+ statusline(win, " "*(win.width-0), 0)
43
+ statusline(win, "Press C-q to quit #{win.height}:#{win.width}", 20)
44
+ title = Label.new( :text => "Demo of Fields", :row => 0, :col => 0 , :width => FFI::NCurses.COLS-1,
45
+ :justify => :center, :color_pair => CP_BLACK)
46
+
47
+ form = Form.new win
48
+ form.add_widget title
49
+ labels = ["Name:", "Age:", "Address:","Mobile No.:", "Email Id:","Hobbies:"]
50
+ labs = []
51
+ row = 3
52
+ col = 5
53
+ labels.each_with_index {|lab, ix|
54
+ w = Label.new( :text => lab, :row => row, :col => col , :width => 20)
55
+ labs << w
56
+ row += 2
57
+ w.color_pair = CP_WHITE
58
+ w.justify = :right
59
+ w.attr = FFI::NCurses::A_BOLD
60
+ form.add_widget w
61
+ }
62
+ labels = ["Roger Federer", "20 Slam Drive","9810012345", "ihumble@tennis.com","golf, programming"]
63
+ labels = ["name", "age", "address","mobile", "email","hobbies"]
64
+
65
+ row = 3
66
+ col = 30
67
+ fhash = {}
68
+ labels.each_with_index {|lab, ix|
69
+ w = Field.new( :name => lab, :row => row, :col => col , :width => 50)
70
+ fhash[lab] = w
71
+ row += 2
72
+ w.color_pair = CP_CYAN
73
+ w.attr = FFI::NCurses::A_REVERSE
74
+ w.highlight_color_pair = CP_YELLOW
75
+ w.highlight_attr = REVERSE
76
+ w.null_allowed = true
77
+ form.add_widget w
78
+ }
79
+ message_label = Label.new({text: "Message comes here C-q to quit",
80
+ :name=>"message_label",:row => win.height-2, :col => 2, :width => 60,
81
+ :height => 2, :color_pair => CP_MAGENTA})
82
+ form.add_widget message_label
83
+ #fhash["mobile"].type = :integer
84
+ fhash["mobile"].chars_allowed = /[\d\-]/
85
+ fhash["mobile"].maxlen = 10
86
+ fhash["mobile"].bind_event(:CHANGE) do |f|
87
+ message_label.text = "#{f.getvalue.size()} chars entered"
88
+ statusline(win, "#{f.getvalue.size()} chars entered")
89
+ message_label.repaint_required
90
+ end
91
+ fhash["email"].chars_allowed = /[\w\+\.\@]/
92
+ fhash["email"].valid_regex = /\w+\@\w+\.\w+/
93
+ fhash["age"].valid_range = (18..100)
94
+ fhash["age"].type = :integer
95
+ fhash["hobbies"].maxlen = 100
96
+ form.pack
97
+ form.select_first_field
98
+ win.wrefresh
99
+
100
+ y = x = 1
101
+ while (ch = win.getkey) != FFI::NCurses::KEY_CTRL_Q
102
+ begin
103
+ form.handle_key ch
104
+ rescue => e
105
+ _alert(e.to_s)
106
+ $log.error e
107
+ $log.error e.backtrace.join("\n")
108
+ e = nil
109
+ end
110
+ win.wrefresh
111
+ end
112
+
113
+ rescue => e
114
+ win.destroy if win
115
+ FFI::NCurses.endwin
116
+ puts "printing inside rescue"
117
+ puts e
118
+ puts e.backtrace.join("\n")
119
+ e = nil
120
+ ensure
121
+ win.destroy if win
122
+ FFI::NCurses.endwin
123
+ if e
124
+ puts "printing inside ensure"
125
+ puts e
126
+ puts e.backtrace.join("\n")
127
+ end
128
+ end
data/examples/ex21.rb ADDED
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env ruby
2
+ # example showing labeledfield
3
+ # 2018-03-10
4
+ require 'umbra'
5
+ require 'umbra/label'
6
+ require 'umbra/labeledfield'
7
+
8
+ def create_footer_window h = 2 , w = FFI::NCurses.COLS, t = FFI::NCurses.LINES-2, l = 0
9
+ ewin = Window.new(h, w , t, l)
10
+ end
11
+ def _alert str
12
+ win = create_footer_window
13
+ #FFI::NCurses.init_pair(12, COLOR_WHITE, FFI::NCurses::RED)
14
+ cp = create_color_pair(COLOR_RED, COLOR_WHITE)
15
+ win.wbkgd(FFI::NCurses.COLOR_PAIR(cp)) # white on red, defined here
16
+ win.printstring(0,1, str)
17
+ win.wrefresh
18
+ win.getkey
19
+ win.destroy
20
+ end
21
+ def startup
22
+ require 'logger'
23
+ require 'date'
24
+
25
+ path = File.join(ENV["LOGDIR"] || "./" ,"v.log")
26
+ file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
27
+ $log = Logger.new(path)
28
+ $log.level = Logger::DEBUG
29
+ today = Date.today
30
+ $log.info "Field demo #{$0} started on #{today}"
31
+ FFI::NCurses.init_pair(10, FFI::NCurses::BLACK, FFI::NCurses::GREEN) # statusline
32
+ end
33
+ def statusline win, str, col = 0
34
+ win.printstring( FFI::NCurses.LINES-1, col, str, 10)
35
+ end
36
+ begin
37
+ include Umbra
38
+ init_curses
39
+ startup
40
+ #FFI::NCurses.init_pair(12, COLOR_WHITE, FFI::NCurses::RED)
41
+ win = Window.new
42
+ statusline(win, " "*(win.width-0), 0)
43
+ statusline(win, "Press C-q to quit #{win.height}:#{win.width}", 20)
44
+ title = Label.new( :text => "Demo of LabeledFields", :row => 0, :col => 0 , :width => FFI::NCurses.COLS-1,
45
+ :justify => :center, :color_pair => CP_BLACK)
46
+
47
+ form = Form.new win
48
+ form.add_widget title
49
+ labels = ["Name:", "Age:", "Address:","Mobile No.:", "Email Id:","Hobbies:"]
50
+ labs = []
51
+ row = 3
52
+ col = 5
53
+ =begin
54
+ labels.each_with_index {|lab, ix|
55
+ w = Label.new( :text => lab, :row => row, :col => col , :width => 20)
56
+ labs << w
57
+ row += 2
58
+ w.color_pair = CP_WHITE
59
+ w.justify = :right
60
+ w.attr = FFI::NCurses::A_BOLD
61
+ form.add_widget w
62
+ }
63
+ =end
64
+ labels = ["Name:", "Age:", "Address:","Mobile No.:", "Email Id:","Hobbies:"]
65
+ names = ["name", "age", "address","mobile", "email","hobbies"]
66
+
67
+ row = 3
68
+ col = 30
69
+ fhash = {}
70
+ names.each_with_index {|lab, ix|
71
+ w = LabeledField.new( :name => lab, :row => row, :col => col , :width => 50, label: labels[ix],
72
+ :label_highlight_attr => BOLD
73
+ )
74
+ fhash[lab] = w
75
+ row += 2
76
+ w.color_pair = CP_CYAN
77
+ w.attr = FFI::NCurses::A_REVERSE
78
+ w.highlight_color_pair = CP_YELLOW
79
+ w.highlight_attr = REVERSE
80
+ w.null_allowed = true
81
+ form.add_widget w
82
+ }
83
+ message_label = Label.new({text: "Message comes here C-q to quit",
84
+ :name=>"message_label",:row => win.height-2, :col => 2, :width => 60,
85
+ :height => 2, :color_pair => CP_MAGENTA})
86
+ form.add_widget message_label
87
+ #fhash["mobile"].type = :integer
88
+ fhash["mobile"].chars_allowed = /[\d\-]/
89
+ fhash["mobile"].maxlen = 10
90
+ fhash["mobile"].mnemonic = "m"
91
+ fhash["name"].mnemonic = "n"
92
+ fhash["age"].mnemonic = "a"
93
+ fhash["address"].mnemonic = "d"
94
+ fhash["mobile"].bind_event(:CHANGE) do |f|
95
+ message_label.text = "#{f.getvalue.size()} chars entered"
96
+ statusline(win, "#{f.getvalue.size()} chars entered")
97
+ message_label.repaint_required
98
+ end
99
+ fhash["email"].chars_allowed = /[\w\+\.\@]/
100
+ fhash["email"].valid_regex = /\w+\@\w+\.\w+/
101
+ fhash["age"].valid_range = (18..100)
102
+ fhash["age"].type = :integer
103
+ fhash["hobbies"].maxlen = 100
104
+ form.pack
105
+ form.select_first_field
106
+ win.wrefresh
107
+
108
+ y = x = 1
109
+ while (ch = win.getkey) != FFI::NCurses::KEY_CTRL_Q
110
+ begin
111
+ form.handle_key ch
112
+ rescue => e
113
+ _alert(e.to_s)
114
+ $log.error e
115
+ $log.error e.backtrace.join("\n")
116
+ e = nil
117
+ end
118
+ win.wrefresh
119
+ end
120
+
121
+ rescue => e
122
+ win.destroy if win
123
+ FFI::NCurses.endwin
124
+ puts "printing inside rescue"
125
+ puts e
126
+ puts e.backtrace.join("\n")
127
+ e = nil
128
+ ensure
129
+ win.destroy if win
130
+ FFI::NCurses.endwin
131
+ if e
132
+ puts "printing inside ensure"
133
+ puts e
134
+ puts e.backtrace.join("\n")
135
+ end
136
+ end
data/examples/ex3.rb ADDED
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env ruby
2
+ # example showing labels and fields and buttons
3
+ # 2018-03-11
4
+ require 'umbra'
5
+ require 'umbra/label'
6
+ require 'umbra/field'
7
+ require 'umbra/button'
8
+ require 'umbra/togglebutton'
9
+ require 'umbra/checkbox'
10
+ require 'umbra/buttongroup'
11
+ require 'umbra/radiobutton'
12
+
13
+ def startup
14
+ require 'logger'
15
+ require 'date'
16
+
17
+ path = File.join(ENV["LOGDIR"] || "./" ,"v.log")
18
+ file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
19
+ $log = Logger.new(path)
20
+ $log.level = Logger::DEBUG
21
+ today = Time.now.to_s
22
+ $log.info "Button demo #{$0} started on #{today}"
23
+ FFI::NCurses.init_pair(10, FFI::NCurses::BLACK, FFI::NCurses::GREEN) # statusline
24
+ end
25
+ def statusline win, str, col = 1
26
+ # LINES-2 prints on second last line so that box can be seen
27
+ win.printstring( FFI::NCurses.LINES-2, col, str, 6, REVERSE)
28
+ end
29
+ begin
30
+ include Umbra
31
+ init_curses
32
+ startup
33
+ #win = Window.new
34
+ win = Window.new 21,100, 0, 20
35
+ statusline(win, " "*(win.width-0), 0)
36
+ win.box
37
+ statusline(win, "Press C-q to quit #{win.height}:#{win.width}", 20)
38
+ str = " Demo of Buttons "
39
+ win.title str
40
+
41
+ catch(:close) do
42
+ form = Form.new win
43
+ labels = ["Name: ", "Address: ","Mobile No.", "Email Id:","Hobbies: "]
44
+ labs = []
45
+ row = 3
46
+ col = 5
47
+ labels.each_with_index {|lab, ix|
48
+ w = Label.new( :text => lab, :row => row, :col => col )
49
+ labs << w
50
+ row += 2
51
+ w.color_pair = 1
52
+ w.attr = BOLD
53
+ form.add_widget w
54
+ }
55
+ labels = ["Roger Federer", "20 Slam Drive","9810012345", "ihumble@tennis.com","golf, programming"]
56
+ labels = ["name", "address","mobile", "email","hobbies"]
57
+
58
+ row = 3
59
+ col = 30
60
+ labels.each_with_index {|lab, ix|
61
+ w = Field.new( :name => lab, :row => row, :col => col , :width => 50)
62
+ labs << w
63
+ row += 2
64
+ w.color_pair = 1
65
+ w.attr = REVERSE
66
+ form.add_widget w
67
+ }
68
+
69
+ message_label = Label.new({text: "Message comes here C-q to quit",
70
+ :name=>"message_label",:row => win.height-2, :col => 2, :width => 60,
71
+ :height => 2, :color_pair => 5})
72
+
73
+ row += 0
74
+ togglebutton = ToggleButton.new()
75
+ togglebutton.value = true
76
+ togglebutton.onvalue = " Toggle Down "
77
+ togglebutton.offvalue =" Untoggle "
78
+ togglebutton.row = row
79
+ togglebutton.col = col
80
+ togglebutton.command do
81
+ if togglebutton.value
82
+ message_label.text = "Toggle button was pressed"
83
+ else
84
+ message_label.text = "UNToggle button was pressed"
85
+ end
86
+ # we need this since we have done away with dsl_property
87
+ message_label.repaint_required = true
88
+ end
89
+ form.add_widget togglebutton
90
+
91
+ check = Checkbox.new text: "No Frames", value: true, row: row+1, col: col, mnemonic: "N"
92
+ check1 = Checkbox.new text: "Use https", value: false, row: row+2, col: col, mnemonic: "U"
93
+ row += 2
94
+ form.add_widget check, check1
95
+ [ check, check1 ].each do |cb|
96
+ cb.command do
97
+ message_label.text = "#{cb.text} is now #{cb.value}"
98
+ message_label.repaint_required = true
99
+ end
100
+ end
101
+
102
+ radio1 = RadioButton.new text: "Red", value: "Red", row: check.row, col: col+20
103
+ radio2 = RadioButton.new text: "Blue", value: "Blue", row: check1.row, col: col+20
104
+ group = ButtonGroup.new "Color"
105
+ group.add(radio1).add(radio2)
106
+ form.add_widget radio1, radio2
107
+ group.command do
108
+ message_label.text = "#{group.name} #{group.value} has been selected"
109
+ message_label.repaint_required = true
110
+ end
111
+
112
+ ok_butt = Button.new( :name => 'ok', :text => 'Ok', :row => row+2, :col => col, :width => 10 , :color_pair => 0, :mnemonic => 'O')
113
+ cancel_butt = Button.new( :name => 'cancel', :text => 'Cancel', :row => row+2, :col => col + 20, :width => 10 , :color_pair => 0, mnemonic: 'C')
114
+ form.add_widget ok_butt
115
+ form.add_widget cancel_butt
116
+ FFI::NCurses.mvwhline(win.pointer, ok_butt.row+1, 1, FFI::NCurses::ACS_HLINE, win.width-2)
117
+ cancel_butt.command do
118
+ throw :close
119
+ end
120
+ ok_butt.command do
121
+ form.focusables.each_with_index {|f, ix|
122
+ if f.class.to_s == "Field"
123
+ $log.debug "FIELD #{f.name} = #{f.text}"
124
+ else
125
+ $log.debug "WIDGET #{f.class.to_s}, #{f.name} = #{f.text}"
126
+ end
127
+ }
128
+ throw :close
129
+ end
130
+
131
+
132
+ form.add_widget message_label
133
+
134
+ form.pack
135
+ form.select_first_field
136
+ win.wrefresh
137
+
138
+ y = x = 1
139
+ while (ch = win.getch) != FFI::NCurses::KEY_CTRL_Q
140
+ begin
141
+ form.handle_key ch
142
+ rescue => e
143
+ puts e
144
+ puts e.backtrace.join("\n")
145
+ end
146
+ win.wrefresh
147
+ end
148
+ end # close
149
+
150
+ rescue => e
151
+ win.destroy if win
152
+ win = nil
153
+ FFI::NCurses.endwin
154
+ puts e
155
+ puts e.backtrace.join("\n")
156
+ ensure
157
+ win.destroy if win
158
+ FFI::NCurses.endwin
159
+ if e
160
+ puts e
161
+ puts e.backtrace.join("\n")
162
+ end
163
+ end