mrdialog 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|