Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
---|---|---|---|---|
lib/jldrill/views/gtk/widgets/StatisticsWindow.rb | 164 | 135 | 93.90%
|
93.33%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 require 'Context/Gtk/Widget' |
2 require 'jldrill/model/Quiz/Counter' |
3 require 'gtk2' |
4 |
5 module JLDrill::Gtk |
6 |
7 class StatisticsTable < Gtk::Table |
8 attr_reader :values |
9 |
10 def initialize(rows, columns) |
11 super(rows.size + 1, columns.size + 1, false) |
12 @values = addEntries(rows, columns) |
13 end |
14 |
15 def addEntries(rows, columns) |
16 values = makeValues(rows.size, columns.size) |
17 columns.each_index do |i| |
18 column(i + 1, columns[i]) |
19 end |
20 rows.each_index do |i| |
21 row(i + 1, rows[i]) |
22 0.upto(columns.size - 1) do |j| |
23 addValue(values[i][j], i + 1, j + 1) |
24 end |
25 end |
26 values |
27 end |
28 |
29 def makeValues(height, width) |
30 retVal = [] |
31 0.upto(height - 1) do |
32 retVal.push([]) |
33 end |
34 0.upto(height - 1) do |i| |
35 0.upto(width - 1) do |j| |
36 retVal[i][j] = Gtk::Label.new("0") |
37 end |
38 end |
39 retVal |
40 end |
41 |
42 def row(rowNum, text) |
43 label = Gtk::Label.new(text) |
44 # Add 1 to row to make up for the headers |
45 attach(label, |
46 # X direction # Y direction |
47 0, 1, rowNum + 1, rowNum + 2, |
48 Gtk::EXPAND | Gtk::FILL, 0, |
49 0, 0) |
50 end |
51 |
52 def column(colNum, text) |
53 label = Gtk::Label.new(text) |
54 # Add 1 to row to make up for the headers |
55 attach(label, |
56 # X direction # Y direction |
57 colNum + 1, colNum + 2, 0, 1, |
58 Gtk::EXPAND | Gtk::FILL, 0, |
59 0, 0) |
60 |
61 end |
62 |
63 def addValue(value, row, column) |
64 # Add 1 to row to make up for the headers |
65 attach(value, |
66 # X direction # Y direction |
67 column + 1, column + 2, row + 1, row + 2, |
68 Gtk::EXPAND | Gtk::FILL, 0, |
69 0, 0) |
70 end |
71 end |
72 |
73 class StatisticsWindow < Gtk::Window |
74 include Context::Gtk::Widget |
75 |
76 attr_reader :accel |
77 |
78 def initialize(view) |
79 @view = view |
80 @closed = false |
81 super("Statistics") |
82 connectSignals unless @view.nil? |
83 |
84 hbox = Gtk::HBox.new() |
85 add(hbox) |
86 ## Layout everything in a vertical table |
87 counter = JLDrill::Counter.new |
88 rows = [] |
89 0.upto(7) do |i| |
90 rows = rows.push(counter.levelString(i)) |
91 end |
92 columns = [" Duration ", " Correct ", " Tried ",] |
93 @durationTable = StatisticsTable.new(rows, columns) |
94 hbox.add(@durationTable) |
95 rows = ["Reviewed", "Learned", " Time to review ", |
96 "Time to learn", "Total Accuracy", " Learn Time % ", |
97 " Curr Rate ", " Avg Rate "] |
98 columns = [" "] |
99 @rateTable = StatisticsTable.new(rows, columns) |
100 hbox.add(@rateTable) |
101 end |
102 |
103 def connectSignals |
104 @accel = Gtk::AccelGroup.new |
105 @accel.connect(Gdk::Keyval::GDK_Escape, 0, |
106 Gtk::ACCEL_VISIBLE) do |
107 self.close |
108 end |
109 add_accel_group(@accel) |
110 |
111 signal_connect('delete_event') do |
112 # Request that the destroy signal be sent |
113 false |
114 end |
115 |
116 signal_connect('destroy') do |
117 self.close |
118 end |
119 end |
120 |
121 def close |
122 if !@closed |
123 @view.close |
124 end |
125 end |
126 |
127 def explicitDestroy |
128 @closed = true |
129 self.destroy |
130 end |
131 |
132 def updateDuration(counter) |
133 table = counter.table |
134 0.upto(6) do |i| |
135 @durationTable.values[i][0].text = table[i].to_s |
136 end |
137 @durationTable.values[7][0].text = table[7].to_s |
138 end |
139 |
140 def updateAccuracy(stats) |
141 0.upto(7) do |i| |
142 acc = stats.levels[i].accuracy |
143 if !acc.nil? |
144 @durationTable.values[i][1].text = acc.to_s + "% " |
145 @durationTable.values[i][2].text = stats.levels[i].total.to_s |
146 else |
147 @durationTable.values[i][1].text = " - " |
148 @durationTable.values[i][2].text = " - " |
149 end |
150 end |
151 end |
152 |
153 def updateRate(stats) |
154 @rateTable.values[0][0].text = stats.reviewed.to_s |
155 @rateTable.values[1][0].text = stats.learned.to_s |
156 @rateTable.values[2][0].text = stats.reviewPace.to_s + "s " |
157 @rateTable.values[3][0].text = stats.learnPace.to_s + "s " |
158 @rateTable.values[4][0].text = stats.accuracy.to_s + "% " |
159 @rateTable.values[5][0].text = stats.learnTimePercent.to_s + "% " |
160 @rateTable.values[6][0].text = stats.currentReviewRate.to_s + "x " |
161 @rateTable.values[7][0].text = stats.averageReviewRate.to_s + "x " |
162 end |
163 end |
164 end |
Generated on Mon May 23 16:17:47 +0900 2011 with rcov 0.9.8