zerenity 1.3

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. data/CHANGELOG +21 -0
  2. data/README +63 -0
  3. data/examples/example_calendar.rb +6 -0
  4. data/examples/example_colorselection.rb +5 -0
  5. data/examples/example_entry.rb +16 -0
  6. data/examples/example_error.rb +3 -0
  7. data/examples/example_fileselection.rb +26 -0
  8. data/examples/example_info.rb +3 -0
  9. data/examples/example_list.rb +10 -0
  10. data/examples/example_progress.rb +40 -0
  11. data/examples/example_question.rb +4 -0
  12. data/examples/example_textinfo.rb +11 -0
  13. data/examples/example_warning.rb +3 -0
  14. data/lib/zerenity.rb +14 -0
  15. data/lib/zerenity/base.rb +50 -0
  16. data/lib/zerenity/calendar.rb +26 -0
  17. data/lib/zerenity/colorselection.rb +30 -0
  18. data/lib/zerenity/entry.rb +36 -0
  19. data/lib/zerenity/error.rb +17 -0
  20. data/lib/zerenity/fileselection.rb +68 -0
  21. data/lib/zerenity/info.rb +18 -0
  22. data/lib/zerenity/list.rb +110 -0
  23. data/lib/zerenity/messagedialog.rb +34 -0
  24. data/lib/zerenity/progress.rb +136 -0
  25. data/lib/zerenity/progress.rb~ +136 -0
  26. data/lib/zerenity/question.rb +26 -0
  27. data/lib/zerenity/scale.rb +41 -0
  28. data/lib/zerenity/textinfo.rb +49 -0
  29. data/lib/zerenity/warning.rb +18 -0
  30. data/test/all.rb +2 -0
  31. data/test/tc_base.rb +35 -0
  32. data/test/tc_calendar.rb +28 -0
  33. data/test/tc_entry.rb +49 -0
  34. data/test/tc_fileselection.rb +37 -0
  35. data/test/tc_info.rb +16 -0
  36. data/test/tc_list.rb +138 -0
  37. data/test/tc_messagedialog.rb +16 -0
  38. data/test/tc_progress.rb +76 -0
  39. data/test/tc_question.rb +23 -0
  40. data/test/tc_scale.rb +33 -0
  41. data/test/tc_textinfo.rb +33 -0
  42. data/test/tc_warning.rb +16 -0
  43. data/test/ts_zerenity.rb +33 -0
  44. metadata +97 -0
@@ -0,0 +1,41 @@
1
+ require('zerenity/base')
2
+
3
+ module Zerenity
4
+ # Displays a sliding scale. Returns the value selected or nil if
5
+ # cancel is pressed.
6
+ #
7
+ # ====Options
8
+ # [:min] The minimum value of the sliding scale. Defaults to 0.
9
+ # [:max] The maximum value of the sliding scale. Defaults to 100.
10
+ # [:step] The size of the value increment of the sliding scale for keyboard shortcuts. Defaults to 1.
11
+ # [:initial] The initial value of the sliding scale. Defaults to 0.
12
+ # ====Example Usage
13
+ # value = Zerenity::Scale(:text=>"Please select a value", :min => 1, :max => 250, :step => 3)
14
+ def self.Scale(options={})
15
+ Scale.run(options)
16
+ end
17
+
18
+ class Scale < Zerenity::Base # :nodoc:
19
+ def self.check(options)
20
+ super(options)
21
+ options[:initial] ||= 0.0
22
+ options[:min] ||= 0.0
23
+ options[:max] ||= 100.0
24
+ options[:step] ||= 1.0
25
+ end
26
+
27
+ def self.build(dialog,options)
28
+ super(dialog,options)
29
+ label = Gtk::Label.new(options[:text])
30
+ hscale = Gtk::HScale.new(options[:min],options[:max],options[:step])
31
+ hscale.value = options[:initial].to_f
32
+ dialog.vbox.add(label)
33
+ dialog.vbox.add(hscale)
34
+ end
35
+
36
+ def self.retrieve_selection(dialog,options)
37
+ super(dialog,options)
38
+ dialog.vbox.children[1].value.to_i
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,49 @@
1
+ require('zerenity/base')
2
+
3
+ module Zerenity
4
+ # Displays text in a multiline text info box.
5
+ #
6
+ # ====Options
7
+ # [:editable] If set to true the text info box is editable.
8
+ # [:scrollable] If the size of the text does not fit in the
9
+ # height and width constraints, the text info box will become
10
+ # scrollable
11
+ # [:height,:width] The height and width of the text box, in pixels.
12
+ # Note this is not the height and weidth of the full window.
13
+ # [:text] The text to be displayed in the text info box.
14
+ #
15
+ # ====Example Usage
16
+ # Zerenity::TextIfno(:text=>File.new($0).read)
17
+ def self.TextInfo(options={})
18
+ TextInfo.run(options)
19
+ end
20
+
21
+ class TextInfo < Base # :nodoc:
22
+ def self.check(options)
23
+ super(options)
24
+ options[:editable] ||= false
25
+ options[:scrollable] ||= false
26
+ options[:height] ||= -1
27
+ options[:width] ||= -1
28
+ options[:text] ||= ""
29
+ end
30
+
31
+ def self.build(dialog,options)
32
+ super(dialog,options)
33
+ textView = Gtk::TextView.new
34
+ textView.set_size_request(options[:width].to_i,options[:height].to_i)
35
+ textView.buffer.text = options[:text].to_s
36
+ textView.editable = options[:editable]
37
+ scrolledWindow = Gtk::ScrolledWindow.new
38
+ scrolledWindow.hscrollbar_policy = options[:scrollable] ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER
39
+ scrolledWindow.vscrollbar_policy = options[:scrollable] ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER
40
+ scrolledWindow.add(textView)
41
+ dialog.vbox.add(scrolledWindow)
42
+ end
43
+
44
+ def self.retrieve_selection(dialog,options)
45
+ super(dialog,options)
46
+ return dialog.vbox.children[0].children[0].buffer.text
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ require 'zerenity/messagedialog'
2
+
3
+ module Zerenity
4
+ # Displays a warning dialog on the screen.
5
+ #
6
+ # ====Example Usage
7
+ # Zerenity::Warning(:text=>"This operation can cause data corruption if interrupted")
8
+ def self.Warning(options={})
9
+ Warning.run(options)
10
+ end
11
+
12
+ class Warning < MessageDialog # :nodoc:
13
+ def self.check(options)
14
+ super(options)
15
+ options[:type] = Gtk::MessageDialog::WARNING
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ Dir[File.dirname(__FILE__) + "/tc_*.rb"].each {|fn| require fn}
@@ -0,0 +1,35 @@
1
+ require('test/unit')
2
+ require('zerenity/base')
3
+
4
+ class TC_Base < Test::Unit::TestCase
5
+ def setup
6
+ Gtk.init
7
+ @options={}
8
+ @dialog=Gtk::Dialog.new
9
+ end
10
+
11
+ def test_check_normal
12
+ Zerenity::Base.check(@options)
13
+ assert(@options[:activatesDefault])
14
+ assert_equal("",@options[:title])
15
+ assert_equal("",@options[:text])
16
+ @options[:activatesDefault] = false
17
+ Zerenity::Base.check(@options)
18
+ assert(!@options[:activatesDefault])
19
+ @options[:activatesDefault] = "Randome object"
20
+ Zerenity::Base.check(@options)
21
+ assert(@options[:activatesDefault])
22
+ end
23
+
24
+ def test_normal_build
25
+ Zerenity::Base.build(@dialog,@options)
26
+ assert(@options[:ok_button].use_stock?)
27
+ assert(@options[:cancel_button].use_stock?)
28
+ end
29
+
30
+ def test_button_options
31
+ Zerenity::Base.build(@dialog,@options.merge!(:ok_button => "Foo", :cancel_button => "Bar"))
32
+ assert_equal "Foo", @options[:ok_button].label
33
+ assert_equal("Bar", @options[:cancel_button].label)
34
+ end
35
+ end
@@ -0,0 +1,28 @@
1
+ require('test/unit')
2
+ require('gtk2')
3
+ require('zerenity/calendar')
4
+
5
+ class TC_Calender < Test::Unit::TestCase
6
+ def setup
7
+ Gtk.init
8
+ @options={:text=>"Select a date"}
9
+ @dialog=Gtk::Dialog.new
10
+ end
11
+
12
+ def test_build_normal
13
+ Zerenity::Calendar.build(@dialog,@options)
14
+ assert_equal(Gtk::Label,@dialog.vbox.children[0].class)
15
+ assert_equal("Select a date",@dialog.vbox.children[0].text)
16
+ assert_equal(Gtk::Calendar,@dialog.vbox.children[1].class)
17
+ end
18
+
19
+ def test_retrieve_selection_normal
20
+ Zerenity::Calendar.build(@dialog,@options)
21
+ @dialog.vbox.children[1].select_month(1,1979)
22
+ @dialog.vbox.children[1].select_day(5)
23
+ time = Zerenity::Calendar.retrieve_selection(@dialog,@options)
24
+ assert_equal(5,time.day)
25
+ assert_equal(1,time.month)
26
+ assert_equal(1979,time.year)
27
+ end
28
+ end
@@ -0,0 +1,49 @@
1
+ require('zerenity/entry')
2
+
3
+ class TC_Entry < Test::Unit::TestCase
4
+ def setup
5
+ Gtk.init
6
+ @options = {:title=>"Enter your name",:text=>"Enter your name"}
7
+ @dialog = Gtk::Dialog.new
8
+ end
9
+
10
+ def test_build_normal
11
+ Zerenity::Entry.build(@dialog,@options)
12
+ assert_equal(true,@dialog.vbox.children[1].visibility?)
13
+ end
14
+
15
+ def test_build_adds_default_string
16
+ Zerenity::Entry.build(@dialog,@options.merge(:string => "hi"))
17
+ assert_equal("hi", @dialog.vbox.children[1].text)
18
+ end
19
+
20
+ def test_build_password
21
+ @options[:password] = true
22
+ Zerenity::Entry.build(@dialog,@options)
23
+ assert_equal(false,@dialog.vbox.children[1].visibility?)
24
+ end
25
+
26
+ def test_build_activates_default
27
+ @options[:activatesDefault] = false
28
+ Zerenity::Entry.build(@dialog,@options)
29
+ assert(!@dialog.vbox.children[1].activates_default?)
30
+ end
31
+
32
+ def test_check_normal
33
+ Zerenity::Entry.check(@options)
34
+ assert(!@options[:password])
35
+ assert(@options[:activatesDefault])
36
+ @options[:password] = true
37
+ Zerenity::Entry.check(@options)
38
+ assert(@options[:password])
39
+ @options[:activatesDefault] = false
40
+ Zerenity::Entry.check(@options)
41
+ assert(!@options[:activatesDefault])
42
+ end
43
+
44
+ def test_retrieve_selection_normal
45
+ Zerenity::Entry.build(@dialog,@options)
46
+ @dialog.vbox.children[1].text = "Farrel"
47
+ assert_equal("Farrel",Zerenity::Entry.retrieve_selection(@dialog,@options))
48
+ end
49
+ end
@@ -0,0 +1,37 @@
1
+ require('test/unit')
2
+ require('gtk2')
3
+ require('zerenity/fileselection')
4
+
5
+ class TC_FileSelection < Test::Unit::TestCase
6
+ def setup
7
+ Gtk.init
8
+ @options={}
9
+ @dialog=Gtk::Dialog.new
10
+ end
11
+
12
+ def test_check_normal
13
+ Zerenity::FileSelection.check(@options)
14
+ assert_equal(Gtk::FileChooser::ACTION_OPEN,@options[:action])
15
+ assert_equal("",@options[:title])
16
+ assert_equal(false,@options[:multiple])
17
+ assert_nil(@options[:filename])
18
+ end
19
+
20
+ def test_check_save
21
+ @options[:action] = :save
22
+ Zerenity::FileSelection.check(@options)
23
+ assert_equal(Gtk::FileChooser::ACTION_SAVE,@options[:action])
24
+ end
25
+
26
+ def test_check_select_folder
27
+ @options[:action] = :select_folder
28
+ Zerenity::FileSelection.check(@options)
29
+ assert_equal(Gtk::FileChooser::ACTION_SELECT_FOLDER,@options[:action])
30
+ end
31
+
32
+ def test_check_create_folder
33
+ @options[:action] = :create_folder
34
+ Zerenity::FileSelection.check(@options)
35
+ assert_equal(Gtk::FileChooser::ACTION_CREATE_FOLDER,@options[:action])
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ require('test/unit')
2
+ require('gtk2')
3
+ require('zerenity/info')
4
+
5
+ class TC_Info < Test::Unit::TestCase
6
+ def setup
7
+ Gtk.init
8
+ @options={}
9
+ @dialog=Gtk::Dialog.new
10
+ end
11
+
12
+ def test_check_normal
13
+ Zerenity::Info.check(@options)
14
+ assert_equal(Gtk::MessageDialog::INFO,@options[:type])
15
+ end
16
+ end
@@ -0,0 +1,138 @@
1
+ require('test/unit')
2
+ require('gtk2')
3
+ require('zerenity/list')
4
+
5
+ class TC_List < Test::Unit::TestCase
6
+ def setup
7
+ Gtk.init
8
+ @options = {:columns=>["Snack","Energy(KJ)"],:data=>[["Beer","300"],["Chips","500"],["Chocolate","750"]]}
9
+ @dialog = Gtk::Dialog.new
10
+ end
11
+
12
+ def test_check_normal
13
+ assert_nothing_raised{Zerenity::List.check(@options)}
14
+ end
15
+
16
+ def test_check_no_options
17
+ assert_raise(ArgumentError,""){Zerenity::List.check}
18
+ end
19
+
20
+ def test_check_no_data
21
+ @options[:data] = nil
22
+ assert_raise(ArgumentError,"Column data not set but no error raised"){Zerenity::List.check(@options)}
23
+ end
24
+
25
+ def test_check_no_columns
26
+ @options[:columns] = nil
27
+ assert_raise(ArgumentError,"Column headers not set but no error raised"){Zerenity::List.check(@options)}
28
+ end
29
+
30
+ def test_check_different_columns_data_length
31
+ @options[:columns] << "Fat"
32
+ assert_raise(ArgumentError,"Columns length greater than data but no error raised"){Zerenity::List.check(@options)}
33
+ end
34
+
35
+ def test_check_different_data_length
36
+ @options[:data][1] << "100"
37
+ assert_raise(ArgumentError,"Data lengths differ but no error was raised"){Zerenity::List.check(@options)}
38
+ end
39
+
40
+ def test_check_both_radiolist_checklist
41
+ @options[:checklist] = true
42
+ @options[:radiolist] = true
43
+ assert_raise(ArgumentError,"Radio and checkist options set but no error was raised"){Zerenity::List.check(@options)}
44
+ end
45
+
46
+ def test_build_normal
47
+ Zerenity::List.build(@dialog,@options)
48
+ treeView = @dialog.vbox.children[0]
49
+ assert_equal(Gtk::ListStore,treeView.model.class,"TreeView model class is not ListStore")
50
+ assert_equal(2,treeView.model.n_columns)
51
+ assert_equal(String,treeView.model.get_column_type(0))
52
+ assert_equal(String,treeView.model.get_column_type(1))
53
+ row = treeView.model.iter_first
54
+ @options[:data].each do |datarow|
55
+ datarow.each_with_index do |value,index|
56
+ assert_equal(value,row[index])
57
+ end
58
+ row.next!
59
+ end
60
+ assert_equal(@options[:columns].size,treeView.columns.size)
61
+ end
62
+
63
+ def test_retrieve_selection_normal
64
+ Zerenity::List.build(@dialog,@options)
65
+ treeView = @dialog.vbox.children[0]
66
+ treeView.selection.select_iter(treeView.model.iter_first)
67
+ selection = Zerenity::List.retrieve_selection(@dialog,@options)
68
+ assert_equal(@options[:data][0][0],selection[0])
69
+ assert_equal(@options[:data][0][1],selection[1])
70
+ end
71
+
72
+ def test_build_radio
73
+ @options[:columns] = Array("Selected").concat(@options[:columns])
74
+ @options[:data][0] = Array(true).concat(@options[:data][0])
75
+ @options[:data][1] = Array(false).concat(@options[:data][1])
76
+ @options[:data][2] = Array(false).concat(@options[:data][2])
77
+ @options[:radiolist] = true
78
+ Zerenity::List.build(@dialog,@options)
79
+ treeView = @dialog.vbox.children[0]
80
+ assert_equal(3,treeView.model.n_columns)
81
+ assert_equal(TrueClass,treeView.model.get_column_type(0))
82
+ assert_equal(String,treeView.model.get_column_type(1))
83
+ assert_equal(String,treeView.model.get_column_type(2))
84
+ row = treeView.model.iter_first
85
+ @options[:data].each do |datarow|
86
+ datarow.each_with_index do |value,index|
87
+ assert_equal(value,row[index])
88
+ end
89
+ row.next!
90
+ end
91
+ assert_equal(@options[:columns].size,treeView.columns.size)
92
+ end
93
+
94
+ def test_retrieve_selection_radio
95
+ @options[:columns] = Array("Selected").concat(@options[:columns])
96
+ @options[:data][0] = Array(true).concat(@options[:data][0])
97
+ @options[:data][1] = Array(false).concat(@options[:data][1])
98
+ @options[:data][2] = Array(false).concat(@options[:data][2])
99
+ @options[:radiolist] = true
100
+ Zerenity::List.build(@dialog,@options)
101
+ selected = Zerenity::List.retrieve_selection(@dialog,@options)
102
+ assert_equal(@options[:data][0][1..2],selected)
103
+ end
104
+
105
+ def test_build_checklist
106
+ @options[:columns] = Array("Selected").concat(@options[:columns])
107
+ @options[:data][0] = Array(true).concat(@options[:data][0])
108
+ @options[:data][1] = Array(true).concat(@options[:data][1])
109
+ @options[:data][2] = Array(false).concat(@options[:data][2])
110
+ @options[:checklist] = true
111
+ Zerenity::List.build(@dialog,@options)
112
+ treeView = @dialog.vbox.children[0]
113
+ assert_equal(3,treeView.model.n_columns)
114
+ assert_equal(TrueClass,treeView.model.get_column_type(0))
115
+ assert_equal(String,treeView.model.get_column_type(1))
116
+ assert_equal(String,treeView.model.get_column_type(2))
117
+ row = treeView.model.iter_first
118
+ @options[:data].each do |datarow|
119
+ datarow.each_with_index do |value,index|
120
+ assert_equal(value,row[index])
121
+ end
122
+ row.next!
123
+ end
124
+ assert_equal(@options[:columns].size,treeView.columns.size)
125
+ end
126
+
127
+ def test_retrieve_selection_cheklist
128
+ @options[:columns] = Array("Selected").concat(@options[:columns])
129
+ @options[:data][0] = Array(true).concat(@options[:data][0])
130
+ @options[:data][1] = Array(true).concat(@options[:data][1])
131
+ @options[:data][2] = Array(false).concat(@options[:data][2])
132
+ @options[:checklist] = true
133
+ Zerenity::List.build(@dialog,@options)
134
+ selected = Zerenity::List.retrieve_selection(@dialog,@options)
135
+ assert_equal(@options[:data][0][1..2],selected[0])
136
+ assert_equal(@options[:data][1][1..2],selected[1])
137
+ end
138
+ end
@@ -0,0 +1,16 @@
1
+ require('test/unit')
2
+ require('gtk2')
3
+ require('zerenity/messagedialog')
4
+
5
+ class TC_MessageDialog < Test::Unit::TestCase
6
+ def setup
7
+ Gtk.init
8
+ @options={}
9
+ @dialog = Gtk::Dialog.new
10
+ end
11
+
12
+ def test_build_normal
13
+ Zerenity::MessageDialog.build(@dialog,@options)
14
+ assert_nil(@options[:cancel_button])
15
+ end
16
+ end
@@ -0,0 +1,76 @@
1
+ require('test/unit')
2
+ require('zerenity/progress')
3
+
4
+ class TC_Progress < Test::Unit::TestCase
5
+ def setup
6
+ Gtk.init
7
+ @options = {:title=>"Operation in progress",:text=>"Building index..."}
8
+ @dialog = Gtk::Dialog.new
9
+ @hButtonBox = Gtk::HButtonBox.new
10
+ @hButtonBox.add(Gtk::Button.new)
11
+ @hButtonBox.add(Gtk::Button.new)
12
+ @progressProxy = Zerenity::ProgressProxy.new
13
+ end
14
+
15
+ def test_build_normal
16
+ Zerenity::Progress.build(@dialog,@options,@progressProxy)
17
+ assert_equal(Gtk::ProgressBar,@dialog.vbox.children[1].class)
18
+ assert_equal(@options[:text],@dialog.vbox.children[0].text)
19
+ end
20
+
21
+ def test_check_normal
22
+ Zerenity::Progress.check(@options)
23
+ assert(!@options[:autoClose])
24
+ assert(!@options[:cancellable])
25
+ end
26
+
27
+ def test_check_options
28
+ @options[:autoClose]=true
29
+ @options[:cancellable]=true
30
+ Zerenity::Progress.check(@options)
31
+ assert(@options[:autoClose])
32
+ assert(@options[:cancellable])
33
+ end
34
+ end
35
+
36
+ class TC_ProgressProxy < Test::Unit::TestCase
37
+ def setup
38
+ Gtk.init
39
+ @progressBar = Gtk::ProgressBar.new
40
+ @progress= Zerenity::ProgressProxy.new
41
+ @progress.progressBar = @progressBar
42
+ end
43
+
44
+ def test_update
45
+ @progress.update(0.10,"10%")
46
+ assert_equal(0.10,@progressBar.fraction)
47
+ assert_equal("10%",@progressBar.text)
48
+ @progress.update(0.15)
49
+ assert_equal(0.15,@progressBar.fraction)
50
+ assert_raise(ArgumentError){@progress.update}
51
+ end
52
+
53
+ def test_pulse
54
+ @progress.pulse
55
+ assert(@progressBar.pulse)
56
+ assert_nil(@progressBar.text)
57
+ @progress.pulse("Compiling")
58
+ assert(@progressBar.pulse)
59
+ assert_equal("Compiling",@progressBar.text)
60
+ end
61
+
62
+ def test_text
63
+ @progress.text="Compiling"
64
+ assert_equal("Compiling",@progressBar.text)
65
+ end
66
+
67
+ def test_percentage
68
+ @progress.percentage=0.5
69
+ assert_equal(0.5,@progressBar.fraction)
70
+ end
71
+
72
+ def test_cancelled
73
+ @progress.cancel!
74
+ assert_equal(true,@progress.cancelled?)
75
+ end
76
+ end