mrdialog 1.0.1
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 +7 -0
- data/.document +5 -0
- data/ChangeLog.md +61 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +82 -0
- data/LICENSE.txt +21 -0
- data/README.rdoc +52 -0
- data/Rakefile +62 -0
- data/VERSION +1 -0
- data/lib/mrdialog/mrdialog.rb +1245 -0
- data/lib/mrdialog.rb +3 -0
- data/pkg/mrdialog-1.0.1.gem +0 -0
- data/samples/buildlist.rb +77 -0
- data/samples/calendar.rb +33 -0
- data/samples/checklist.rb +67 -0
- data/samples/editbox.rb +60 -0
- data/samples/form1.rb +90 -0
- data/samples/form2.rb +170 -0
- data/samples/form3.rb +96 -0
- data/samples/fselect.rb +29 -0
- data/samples/gauge.rb +39 -0
- data/samples/infobox.rb +36 -0
- data/samples/inputbox.rb +36 -0
- data/samples/menubox.rb +72 -0
- data/samples/mixedform1.rb +120 -0
- data/samples/msgbox.rb +31 -0
- data/samples/password.rb +32 -0
- data/samples/password2.rb +39 -0
- data/samples/passwordform.rb +91 -0
- data/samples/pause.rb +48 -0
- data/samples/prgbox.rb +34 -0
- data/samples/program.rb +33 -0
- data/samples/progress.rb +32 -0
- data/samples/radiolist.rb +71 -0
- data/samples/shortlist +19 -0
- data/samples/timebox.rb +31 -0
- data/samples/treeview.rb +100 -0
- data/samples/treeview2.rb +80 -0
- data/samples/yesno.rb +39 -0
- data/test/helper.rb +34 -0
- data/test/test_mrdialog.rb +7 -0
- metadata +161 -0
data/lib/mrdialog.rb
ADDED
Binary file
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
begin
|
7
|
+
ME = File.basename($0)
|
8
|
+
text = <<EOF
|
9
|
+
This example is taken from dialog/samples/menulist
|
10
|
+
shell script.
|
11
|
+
|
12
|
+
Hi, this is a buildlist dialog. The list on the left
|
13
|
+
shows the unselected items. The list on the right shows
|
14
|
+
the selected items. Use SPACE bar to select/unselect
|
15
|
+
items.
|
16
|
+
|
17
|
+
EOF
|
18
|
+
items = []
|
19
|
+
Struct.new("BuildListData", :tag, :item, :status)
|
20
|
+
data = Struct::BuildListData.new
|
21
|
+
|
22
|
+
data.tag = "1"
|
23
|
+
data.item = "Item number 1"
|
24
|
+
data.status = true
|
25
|
+
items.push(data.to_a)
|
26
|
+
|
27
|
+
data = Struct::BuildListData.new
|
28
|
+
data.tag = "2"
|
29
|
+
data.item = "Item number 2"
|
30
|
+
data.status = false
|
31
|
+
items.push(data.to_a)
|
32
|
+
|
33
|
+
data = Struct::BuildListData.new
|
34
|
+
data.tag = "3"
|
35
|
+
data.item = "Item number 3"
|
36
|
+
data.status = false
|
37
|
+
items.push(data.to_a)
|
38
|
+
|
39
|
+
data = Struct::BuildListData.new
|
40
|
+
data.tag = "4"
|
41
|
+
data.item = "Item number 4"
|
42
|
+
data.status = true
|
43
|
+
items.push(data.to_a)
|
44
|
+
|
45
|
+
data = Struct::BuildListData.new
|
46
|
+
data.tag = "5"
|
47
|
+
data.item = "Item number 5"
|
48
|
+
data.status = false
|
49
|
+
items.push(data.to_a)
|
50
|
+
|
51
|
+
data = Struct::BuildListData.new
|
52
|
+
data.tag = "6"
|
53
|
+
data.item = "Item number 6"
|
54
|
+
data.status = true
|
55
|
+
items.push(data.to_a)
|
56
|
+
|
57
|
+
dialog = MRDialog.new
|
58
|
+
dialog.clear = true
|
59
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
60
|
+
|
61
|
+
height = 0
|
62
|
+
width = 0
|
63
|
+
listheight = 0
|
64
|
+
|
65
|
+
selected_items = dialog.buildlist(text, items, height, width, listheight)
|
66
|
+
exit_code = dialog.exit_code
|
67
|
+
puts "Exit code: #{exit_code}"
|
68
|
+
puts "Selecetd tags:"
|
69
|
+
selected_items.each do |item|
|
70
|
+
puts " '#{item}'"
|
71
|
+
end
|
72
|
+
|
73
|
+
rescue => e
|
74
|
+
puts "#{$!}"
|
75
|
+
t = e.backtrace.join("\n\t")
|
76
|
+
puts "Error: #{t}"
|
77
|
+
end
|
data/samples/calendar.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
########################################################################
|
4
|
+
# Example for calendar widget.
|
5
|
+
# muquit@muquit.com Apr-02-2014
|
6
|
+
########################################################################
|
7
|
+
#
|
8
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
9
|
+
require 'date'
|
10
|
+
|
11
|
+
begin
|
12
|
+
ME = File.basename($0)
|
13
|
+
text = "Please choose a date..."
|
14
|
+
|
15
|
+
height = 0
|
16
|
+
width = 0
|
17
|
+
day = Date.today.mday
|
18
|
+
month =Date.today.mon
|
19
|
+
year =Date.today.year
|
20
|
+
|
21
|
+
dialog = MRDialog.new
|
22
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
23
|
+
dialog.clear = true
|
24
|
+
dialog.title = "CALENDAR"
|
25
|
+
|
26
|
+
date = dialog.calendar(text, height, width, day, month, year)
|
27
|
+
puts "Result is: #{date.to_s}"
|
28
|
+
|
29
|
+
rescue => e
|
30
|
+
puts "#{$!}"
|
31
|
+
t = e.backtrace.join("\n\t")
|
32
|
+
puts "Error: #{t}"
|
33
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
begin
|
7
|
+
ME = File.basename($0)
|
8
|
+
text = <<EOF
|
9
|
+
This example is taken from dialog/samples/radiolist
|
10
|
+
shell script.
|
11
|
+
|
12
|
+
Hi, this is a radiolist box. You can use this to
|
13
|
+
present a list of choices which can be turned on or
|
14
|
+
off. If there are more items than can fit on the
|
15
|
+
screen, the list will be scrolled. You can use the
|
16
|
+
UP/DOWN arrow keys, the first letter of the choice as a
|
17
|
+
hot key, or the number keys 1-9 to choose an option.
|
18
|
+
Press SPACE to toggle an option on/off.
|
19
|
+
|
20
|
+
Which of the following are fruits?
|
21
|
+
|
22
|
+
EOF
|
23
|
+
items = []
|
24
|
+
checklist_data = Struct.new(:tag, :item, :select)
|
25
|
+
|
26
|
+
data = checklist_data.new
|
27
|
+
data.tag = "Apple"
|
28
|
+
data.item = "It's an applie"
|
29
|
+
data.select = false
|
30
|
+
items.push(data.to_a)
|
31
|
+
|
32
|
+
data = checklist_data.new
|
33
|
+
data.tag = "Dog"
|
34
|
+
data.item = "No it's not my dog"
|
35
|
+
data.select = true
|
36
|
+
items.push(data.to_a)
|
37
|
+
|
38
|
+
data = checklist_data.new
|
39
|
+
data.tag = "Orange"
|
40
|
+
data.item = "Yeah! it is juicy"
|
41
|
+
data.select = false
|
42
|
+
items.push(data.to_a)
|
43
|
+
|
44
|
+
data = checklist_data.new
|
45
|
+
data.tag = "Chicken"
|
46
|
+
data.item = "Normally not a pet"
|
47
|
+
data.select = true
|
48
|
+
items.push(data.to_a)
|
49
|
+
|
50
|
+
dialog = MRDialog.new
|
51
|
+
dialog.clear = true
|
52
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
53
|
+
|
54
|
+
selected_items = dialog.checklist(text, items)
|
55
|
+
exit_code = dialog.exit_code
|
56
|
+
puts selected_items.class
|
57
|
+
puts "Exit code: #{exit_code}"
|
58
|
+
puts "Selected Items:"
|
59
|
+
selected_items.each do |item|
|
60
|
+
puts " '#{item}'"
|
61
|
+
end
|
62
|
+
|
63
|
+
rescue => e
|
64
|
+
puts "#{$!}"
|
65
|
+
t = e.backtrace.join("\n\t")
|
66
|
+
puts "Error: #{t}"
|
67
|
+
end
|
data/samples/editbox.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
4
|
+
require 'pp'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
begin
|
8
|
+
ME = File.basename($0)
|
9
|
+
|
10
|
+
tmp = Tempfile.new('editbox')
|
11
|
+
tmp.puts <<-EOF
|
12
|
+
Hi, this is an edit box. It can be used to edit text from a file.
|
13
|
+
|
14
|
+
It's like a simple text editor, with these keys implemented:
|
15
|
+
|
16
|
+
PGDN - Move down one page
|
17
|
+
PGUP - Move up one page
|
18
|
+
DOWN - Move down one line
|
19
|
+
UP - Move up one line
|
20
|
+
DELETE - Delete the current character
|
21
|
+
BACKSPC - Delete the previous character
|
22
|
+
|
23
|
+
Unlike Xdialog, it does not do these:
|
24
|
+
|
25
|
+
CTRL C - Copy text
|
26
|
+
CTRL V - Paste text
|
27
|
+
|
28
|
+
Because dialog normally uses TAB for moving between fields,
|
29
|
+
this editbox uses CTRL/V as a literal-next character. You
|
30
|
+
can enter TAB characters by first pressing CTRL/V. This
|
31
|
+
example contains a few tab characters.
|
32
|
+
|
33
|
+
It supports the mouse - but only for positioning in the editbox,
|
34
|
+
or for clicking on buttons. Your terminal (emulator) may support
|
35
|
+
cut/paste.
|
36
|
+
|
37
|
+
Try to input some text below:
|
38
|
+
|
39
|
+
EOF
|
40
|
+
tmp.close
|
41
|
+
|
42
|
+
height = 0
|
43
|
+
width = 0
|
44
|
+
|
45
|
+
dialog = MRDialog.new
|
46
|
+
dialog.clear = true
|
47
|
+
dialog.shadow = false
|
48
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
49
|
+
|
50
|
+
output = dialog.editbox(tmp.path, height, width)
|
51
|
+
exit_code = dialog.exit_code
|
52
|
+
puts "Exit code: #{exit_code}"
|
53
|
+
if exit_code == 0
|
54
|
+
puts "Output: #{output}"
|
55
|
+
end
|
56
|
+
rescue => e
|
57
|
+
puts "#{$!}"
|
58
|
+
t = e.backtrace.join("\n\t")
|
59
|
+
puts "Error: #{t}"
|
60
|
+
end
|
data/samples/form1.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# muquit@muquit.com Apr-01-2014
|
4
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
begin
|
8
|
+
ME = File.basename($0)
|
9
|
+
# uid=1000(muquit) gid=1000(muquit)
|
10
|
+
# groups=1000(muquit),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),107(lpadmin),125(sambashare)
|
11
|
+
user = ''
|
12
|
+
uid = ''
|
13
|
+
gid = ''
|
14
|
+
home = ENV["HOME"]
|
15
|
+
|
16
|
+
id = `id`.chomp
|
17
|
+
if id =~ /^uid=(\d+)\((.+)\)\sgid=(\d+)\(.*$/
|
18
|
+
uid = $1
|
19
|
+
user = $2
|
20
|
+
gid = $3
|
21
|
+
end
|
22
|
+
|
23
|
+
dialog = MRDialog.new
|
24
|
+
dialog.clear = true
|
25
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
26
|
+
|
27
|
+
text = <<EOF
|
28
|
+
Here is a possible piece of a configuration program.
|
29
|
+
EOF
|
30
|
+
items = []
|
31
|
+
form_data = Struct.new(:label, :ly, :lx, :item, :iy, :ix, :flen, :ilen)
|
32
|
+
|
33
|
+
data = form_data.new
|
34
|
+
data.label = "Username:"
|
35
|
+
data.ly = 1
|
36
|
+
data.lx = 1
|
37
|
+
data.item = user
|
38
|
+
data.iy = 1
|
39
|
+
data.ix = 10
|
40
|
+
data.flen = user.length + 10
|
41
|
+
data.ilen = 0
|
42
|
+
items.push(data.to_a)
|
43
|
+
|
44
|
+
data = form_data.new
|
45
|
+
data.label = "UID:"
|
46
|
+
data.ly = 2
|
47
|
+
data.lx = 1
|
48
|
+
data.item = uid.to_s
|
49
|
+
data.iy = 2
|
50
|
+
data.ix = 10
|
51
|
+
data.flen = uid.length + 10
|
52
|
+
data.ilen = 0
|
53
|
+
items.push(data.to_a)
|
54
|
+
|
55
|
+
data = form_data.new
|
56
|
+
data.label = "GID:"
|
57
|
+
data.ly = 3
|
58
|
+
data.lx = 1
|
59
|
+
data.item = gid.to_s
|
60
|
+
data.iy =3
|
61
|
+
data.ix = 10
|
62
|
+
data.flen = gid.length + 2
|
63
|
+
data.ilen = 0
|
64
|
+
items.push(data.to_a)
|
65
|
+
|
66
|
+
data = form_data.new
|
67
|
+
data.label = "HOME:"
|
68
|
+
data.ly = 4
|
69
|
+
data.lx = 1
|
70
|
+
data.item = home
|
71
|
+
data.iy = 4
|
72
|
+
data.ix = 10
|
73
|
+
data.flen = home.length + 40
|
74
|
+
data.ilen = 0
|
75
|
+
items.push(data.to_a)
|
76
|
+
|
77
|
+
result_hash = dialog.form(text, items, 20, 50, 0)
|
78
|
+
if result_hash
|
79
|
+
puts "Resulting data:"
|
80
|
+
result_hash.each do |key, val|
|
81
|
+
puts " #{key} = #{val}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
rescue => e
|
87
|
+
puts "#{$!}"
|
88
|
+
t = e.backtrace.join("\n\t")
|
89
|
+
puts "Error: #{t}"
|
90
|
+
end
|
data/samples/form2.rb
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
########################################################################
|
4
|
+
# Same as form1 but dialog will not go away unless all the fields are
|
5
|
+
# specified
|
6
|
+
# muquit@muquit.com
|
7
|
+
########################################################################
|
8
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
9
|
+
|
10
|
+
class TestForm2
|
11
|
+
ME = File.basename($0)
|
12
|
+
def initialize
|
13
|
+
@hsh = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def show_warning
|
18
|
+
msg = ''
|
19
|
+
label = 'Username:'
|
20
|
+
if @hsh[label].length == 0
|
21
|
+
msg << "#{label} field is empty"
|
22
|
+
end
|
23
|
+
label = 'UID:'
|
24
|
+
if @hsh[label].length == 0
|
25
|
+
msg << "\n"
|
26
|
+
msg << "#{label} field is empty"
|
27
|
+
end
|
28
|
+
label = 'GID:'
|
29
|
+
if @hsh[label].length == 0
|
30
|
+
msg << "\n"
|
31
|
+
msg << "#{label} field is empty"
|
32
|
+
end
|
33
|
+
label = 'HOME:'
|
34
|
+
if @hsh[label].length == 0
|
35
|
+
msg << "\n"
|
36
|
+
msg << "#{label} field is empty"
|
37
|
+
end
|
38
|
+
dialog = MRDialog.new
|
39
|
+
dialog.title = "ERROR"
|
40
|
+
dialog.clear = true
|
41
|
+
dialog.msgbox(msg, 10, 41)
|
42
|
+
end
|
43
|
+
|
44
|
+
def form_filled?
|
45
|
+
if @hsh['Username:'].length > 0 &&
|
46
|
+
@hsh['UID:'].length > 0 &&
|
47
|
+
@hsh['GID:'].length > 0 &&
|
48
|
+
@hsh['HOME:'].length > 0
|
49
|
+
return true
|
50
|
+
end
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
|
54
|
+
def doit
|
55
|
+
user = ''
|
56
|
+
uid = ''
|
57
|
+
gid = ''
|
58
|
+
home = ENV["HOME"]
|
59
|
+
|
60
|
+
id = `id`.chomp
|
61
|
+
if id =~ /^uid=(\d+)\((.+)\)\sgid=(\d+)\(.*$/
|
62
|
+
uid = $1
|
63
|
+
user = $2
|
64
|
+
gid = $3
|
65
|
+
end
|
66
|
+
|
67
|
+
dialog = MRDialog.new
|
68
|
+
dialog.clear = true
|
69
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
70
|
+
|
71
|
+
text = <<EOF
|
72
|
+
In this example of form, if any field is empty a dialog
|
73
|
+
will POP show an error. The form will exit if Cancel
|
74
|
+
button is selectged or Esc key is pressed twice.
|
75
|
+
EOF
|
76
|
+
|
77
|
+
@hsh['Username:'] = user
|
78
|
+
@hsh['UID:'] = uid.to_s
|
79
|
+
@hsh['GID:'] = gid.to_s
|
80
|
+
@hsh['HOME:'] = home
|
81
|
+
|
82
|
+
flen = 60
|
83
|
+
form_data = Struct.new(:label, :ly, :lx, :item, :iy, :ix, :flen, :ilen)
|
84
|
+
|
85
|
+
# infinite loop. break out
|
86
|
+
# - if all the values of the form are filled in when OK button is pressed
|
87
|
+
# - if Esc button is pressed twice
|
88
|
+
loop do
|
89
|
+
items = []
|
90
|
+
label = "Username:"
|
91
|
+
data = form_data.new
|
92
|
+
data.label = label
|
93
|
+
data.ly = 1
|
94
|
+
data.lx = 1
|
95
|
+
data.item = @hsh[label]
|
96
|
+
data.iy = 1
|
97
|
+
data.ix = 10
|
98
|
+
data.flen = flen
|
99
|
+
data.ilen = 0
|
100
|
+
items.push(data.to_a)
|
101
|
+
|
102
|
+
data = form_data.new
|
103
|
+
label = "UID:"
|
104
|
+
data.label = label
|
105
|
+
data.ly = 2
|
106
|
+
data.lx = 1
|
107
|
+
data.item = @hsh[label]
|
108
|
+
data.iy = 2
|
109
|
+
data.ix = 10
|
110
|
+
data.flen = flen
|
111
|
+
data.ilen = 0
|
112
|
+
items.push(data.to_a)
|
113
|
+
|
114
|
+
data = form_data.new
|
115
|
+
label = "GID:"
|
116
|
+
data.label = label
|
117
|
+
data.ly = 3
|
118
|
+
data.lx = 1
|
119
|
+
data.item = @hsh[label]
|
120
|
+
data.iy =3
|
121
|
+
data.ix = 10
|
122
|
+
data.flen = flen
|
123
|
+
data.ilen = 0
|
124
|
+
items.push(data.to_a)
|
125
|
+
|
126
|
+
data = form_data.new
|
127
|
+
label = "HOME:"
|
128
|
+
data.label = label
|
129
|
+
data.ly = 4
|
130
|
+
data.lx = 1
|
131
|
+
data.item = @hsh[label]
|
132
|
+
data.iy = 4
|
133
|
+
data.ix = 10
|
134
|
+
data.flen = flen
|
135
|
+
data.ilen = 0
|
136
|
+
items.push(data.to_a)
|
137
|
+
|
138
|
+
@hsh = dialog.form(text, items, 20, 60, 0)
|
139
|
+
exit_code = dialog.exit_code
|
140
|
+
@hsh.each do |key, val|
|
141
|
+
puts "'#{key}' = #{val}"
|
142
|
+
end
|
143
|
+
|
144
|
+
puts "Exit code: #{exit_code}"
|
145
|
+
case exit_code
|
146
|
+
when dialog.dialog_cancel
|
147
|
+
puts "Username: #{@hsh["Username:"]}"
|
148
|
+
puts "CANCEL"
|
149
|
+
break
|
150
|
+
when dialog.dialog_esc
|
151
|
+
puts "Username: #{@hsh["Username:"]}"
|
152
|
+
puts "Escape.. exiting"
|
153
|
+
break
|
154
|
+
end
|
155
|
+
if !form_filled?
|
156
|
+
show_warning
|
157
|
+
else
|
158
|
+
puts "Resulting data:"
|
159
|
+
@hsh.each do |key, val|
|
160
|
+
puts "'#{key}' = #{val}"
|
161
|
+
end
|
162
|
+
break
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
if __FILE__ == $0
|
169
|
+
TestForm2.new.doit
|
170
|
+
end
|
data/samples/form3.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
########################################################################
|
4
|
+
# Culculate the max length of key as the x for the item
|
5
|
+
########################################################################
|
6
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
class TestForm
|
10
|
+
ME = File.basename($0)
|
11
|
+
HIDDEN = 1
|
12
|
+
READ_ONLY = 2
|
13
|
+
def initialize
|
14
|
+
@a = []
|
15
|
+
@h = {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def populate_data
|
19
|
+
@a << "Base DN: "
|
20
|
+
@a << "LDAP URI: "
|
21
|
+
@a << "LDAP Version: "
|
22
|
+
@a << "LDAP Bind DN: "
|
23
|
+
@a << "LDAP Bind Password: "
|
24
|
+
@a << "Login Attribute: "
|
25
|
+
|
26
|
+
@h[@a[0]] = "dc=example,dc=com"
|
27
|
+
@h[@a[1]] = "ldap://192.168.1.1:389"
|
28
|
+
@h[@a[2]] = "3"
|
29
|
+
@h[@a[3]] = "cn=Mary Jane, cn=Users, dc=example, dc=com"
|
30
|
+
@h[@a[4]] = "secret"
|
31
|
+
@h[@a[5]] = "sAMAccountName"
|
32
|
+
end
|
33
|
+
|
34
|
+
def max_key_len
|
35
|
+
len = 0
|
36
|
+
@a.each do |v|
|
37
|
+
if v.length > len
|
38
|
+
len = v.length
|
39
|
+
end
|
40
|
+
end
|
41
|
+
return len
|
42
|
+
end
|
43
|
+
|
44
|
+
def show_form
|
45
|
+
items = []
|
46
|
+
form_data = Struct.new(:label, :ly, :lx, :item, :iy, :ix, :flen, :ilen, :attr)
|
47
|
+
|
48
|
+
ly = 1
|
49
|
+
lx = 1
|
50
|
+
iy = 1
|
51
|
+
ix = max_key_len
|
52
|
+
flen = 1024
|
53
|
+
@a.each do |key|
|
54
|
+
data = form_data.new
|
55
|
+
data.label = key
|
56
|
+
data.ly = ly
|
57
|
+
data.lx = lx
|
58
|
+
data.item = @h[key]
|
59
|
+
data.iy = ly
|
60
|
+
data.ix = ix
|
61
|
+
data.flen = flen
|
62
|
+
data.ilen = 0
|
63
|
+
if key =~ /password/i
|
64
|
+
data.attr = HIDDEN
|
65
|
+
else
|
66
|
+
data.attr = 0
|
67
|
+
end
|
68
|
+
items.push(data.to_a)
|
69
|
+
ly = ly + 1
|
70
|
+
end
|
71
|
+
|
72
|
+
dialog = MRDialog.new
|
73
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
74
|
+
dialog.clear = true
|
75
|
+
dialog.insecure = true
|
76
|
+
dialog.title = "MIXEDFORM"
|
77
|
+
|
78
|
+
text = <<EOF
|
79
|
+
In this example of mixedform, the x co-ordinate of the items
|
80
|
+
are calculated dynamically. The longest value among the keys
|
81
|
+
is the x value for the items.
|
82
|
+
EOF
|
83
|
+
height = 20
|
84
|
+
width = 70
|
85
|
+
result_hash = dialog.mixedform(text, items, height, width, 0)
|
86
|
+
end
|
87
|
+
|
88
|
+
def doit
|
89
|
+
populate_data
|
90
|
+
show_form
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
if __FILE__ == $0
|
95
|
+
TestForm.new.doit
|
96
|
+
end
|
data/samples/fselect.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# muquit@muquit.com Apr-01-2014
|
4
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
begin
|
8
|
+
ME = File.basename($0)
|
9
|
+
text = <<EOF
|
10
|
+
Please set the time...
|
11
|
+
EOF
|
12
|
+
|
13
|
+
|
14
|
+
dialog = MRDialog.new
|
15
|
+
dialog.clear = true
|
16
|
+
dialog.title = "Please choose a file"
|
17
|
+
|
18
|
+
h = 14
|
19
|
+
w = 48
|
20
|
+
file_path = ENV["HOME"] + "/"
|
21
|
+
file = dialog.fselect(file_path, h, w)
|
22
|
+
|
23
|
+
puts "Result is: #{file}"
|
24
|
+
|
25
|
+
rescue => e
|
26
|
+
puts "#{$!}"
|
27
|
+
t = e.backtrace.join("\n\t")
|
28
|
+
puts "Error: #{t}"
|
29
|
+
end
|
data/samples/gauge.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Example for gauge widget. It is similar to the
|
4
|
+
# one comes with dialog source code.
|
5
|
+
# muquit@muquit.com Apr-02-2014
|
6
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
7
|
+
|
8
|
+
class TestGauge
|
9
|
+
ME = File.basename($0)
|
10
|
+
def initialize
|
11
|
+
end
|
12
|
+
|
13
|
+
def doit
|
14
|
+
text = "Hi, this is a gauge widget"
|
15
|
+
|
16
|
+
height = 20
|
17
|
+
width = 70
|
18
|
+
percent = 0
|
19
|
+
|
20
|
+
dialog = MRDialog.new
|
21
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
22
|
+
dialog.clear = true
|
23
|
+
dialog.title = "GAUGE"
|
24
|
+
|
25
|
+
dialog.gauge(text, height, width, percent) do |f|
|
26
|
+
1.upto(100) do |a|
|
27
|
+
f.puts "XXX"
|
28
|
+
f.puts a
|
29
|
+
f.puts "The new\nmessage (#{a} percent)"
|
30
|
+
f.puts "XXX"
|
31
|
+
sleep 0.05
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
if __FILE__ == $0
|
38
|
+
TestGauge.new.doit
|
39
|
+
end
|
data/samples/infobox.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# muquit@muquit.com Apr-20-2014
|
4
|
+
require [File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'mrdialog'].join('/')
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
class TestInfobox
|
8
|
+
ME = File.basename($0)
|
9
|
+
def initialize
|
10
|
+
end
|
11
|
+
|
12
|
+
def doit
|
13
|
+
dialog = MRDialog.new
|
14
|
+
dialog.logger = Logger.new(ENV["HOME"] + "/dialog_" + ME + ".log")
|
15
|
+
dialog.clear = true
|
16
|
+
dialog.title = "INFOBOX"
|
17
|
+
|
18
|
+
text = <<EOF
|
19
|
+
Hi, this is an information box. It is
|
20
|
+
different from a message box: it will
|
21
|
+
not pause waiting for input after displaying
|
22
|
+
the message. The pause here is only introduced
|
23
|
+
by the sleep command within dialog.
|
24
|
+
|
25
|
+
You have 10 seconds to read this...
|
26
|
+
|
27
|
+
EOF
|
28
|
+
dialog.sleep = 10
|
29
|
+
result = dialog.infobox(text, 10, 52)
|
30
|
+
puts "result: #{result}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if __FILE__ == $0
|
35
|
+
TestInfobox.new.doit
|
36
|
+
end
|