Class: Cosmos::OverviewGraph
Constant Summary
collapse
- DEFAULT_ZOOM_FACTOR =
0.1
- DEFAULT_PAN_FACTOR =
0.1
Constants inherited
from LineGraph
LineGraph::DOUBLE_CLICK_SECONDS, LineGraph::FRAME_OFFSET, LineGraph::GRAPH_SPACER, LineGraph::LABEL_TICK_SIZE, LineGraph::LEFT_X_LABEL_WIDTH_ADJUST
Instance Attribute Summary collapse
Attributes inherited from LineGraph
#draw_cursor_line_callback, #horizontal_lines, #left_y_max, #left_y_min, #mouse_leave_callback, #mouse_left_button_press_callback, #post_error_callback, #pre_error_callback, #right_y_max, #right_y_min, #x_max, #x_max_label, #x_min, #x_min_label
Instance Method Summary
collapse
Methods inherited from LineGraph
#add_horizontal_line, #add_line, #add_popups_for_lines, #adjust_popup_positions, attr_accessor_with_redraw, #auto_scale_x, #auto_scale_y, #auto_scale_y_axis, #build_popups_from_x_value, #build_x_grid_lines, #build_y_grid_lines, #calculate_base, #calculate_scaling_factors, #calculate_x_grid_lines, #calculate_y_grid_lines, #calculate_y_labels, #clear_canvas_and_draw_graph_rectangle, #clear_horizontal_lines, #clear_lines, #convert_x_value_to_text, #convert_y_value_to_text, #draw_cursor_line_and_popups, #draw_cursor_line_and_popups_at_x, #draw_error_icon, #draw_frame, #draw_graph_to_screen, #draw_horizontal_lines, #draw_legend, #draw_line, #draw_lines, #draw_origin_lines, #draw_popups, #draw_title, #draw_x_axis_grid_lines, #draw_x_axis_title, #draw_x_label_and_grid_line, #draw_y_axis_grid_lines, #draw_y_axis_title, #draw_y_label_and_grid_line, #manual_scale_x, #manual_scale_y, #paintEvent, #remote_draw_cursor_line_at_x, #resizeEvent, #scale_graph, #scale_graph_to_value_x, #scale_left_to_right_y, #scale_value_to_graph_x, #scale_value_to_graph_y, #update_graph_size
Constructor Details
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 33
def initialize(parent)
super(parent)
setMaximumHeight(50)
setFocusPolicy(Qt::StrongFocus)
@qt_back_color = Cosmos::getColor(@back_color)
@point_size = 0
@minimum_height = 50
@size_hint = Qt::Size.new(0, @minimum_height)
@window_size = 100.0
@window_min_size = 0.0
@window_max_size = nil
@window_min_x = 0
@window_max_x = 0
@drag_window = false
@drag_start_x = nil
@callback = nil
@window_min_start = 0
@window_max_start = 0
@drag_bar = false
@cursor_in_window = false
@true_max_x = 0
@show_cursor_and_popups = false
@window_left_x = 0
@window_right_x = 0
end
|
Instance Attribute Details
Callback called when the window changes
25
26
27
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 25
def callback
@callback
end
|
#window_max_size ⇒ Object
Maximum allowed size of the window in seconds plotted
23
24
25
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 23
def window_max_size
@window_max_size
end
|
#window_max_x ⇒ Object
Maximum x value in window
31
32
33
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 31
def window_max_x
@window_max_x
end
|
#window_min_size ⇒ Object
Minimum allowed size of the window in seconds plotted
21
22
23
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 21
def window_min_size
@window_min_size
end
|
#window_min_x ⇒ Object
Minimum x value in window
29
30
31
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 29
def window_min_x
@window_min_x
end
|
#window_size ⇒ Object
Window size in seconds plotted
27
28
29
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 27
def window_size
@window_size
end
|
Instance Method Details
#back_color=(value) ⇒ Object
301
302
303
304
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 301
def back_color=(value)
super(value)
@qt_back_color = Cosmos::getColor(@back_color)
end
|
#drag_bar(x) ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 131
def drag_bar(x)
if @cursor_on_bar == :LEFT
temp_min = (@window_min_start + (x - @drag_start_x))
temp_max = @window_max_start
else
temp_min = @window_min_start
temp_max = (@window_max_start + (x - @drag_start_x))
end
value_temp_min = scale_graph_to_value_x(temp_min)
value_temp_max = scale_graph_to_value_x(temp_max)
if value_temp_min > (@window_max_x - @window_min_size)
@window_min_x = @window_max_x - @window_min_size
elsif @window_max_size and value_temp_min < (@window_max_x - @window_max_size)
@window_min_x = @window_max_x - @window_max_size
else
@window_min_x = value_temp_min
end
if scale_value_to_graph_x(@window_min_x) < @graph_left_x
@window_min_x = @x_min
end
if value_temp_max < (@window_min_x + @window_min_size)
@window_max_x = @window_min_x + @window_min_size
elsif @window_max_size and value_temp_max > (@window_min_x + @window_max_size)
@window_max_x = @window_min_x + @window_max_size
else
@window_max_x = value_temp_max
end
if scale_value_to_graph_x(@window_max_x) > @graph_right_x
@window_max_x = @x_max
end
@window_size = @window_max_x - @window_min_x
@redraw_needed = true
graph()
end
|
#drag_lasso(x) ⇒ Object
180
181
182
183
184
185
186
187
188
189
190
191
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 180
def drag_lasso(x)
if (x - @drag_start_x).abs > 5
@drag_bar = true
@window_min_start = @drag_start_x
@window_max_start = @drag_start_x
if x > @drag_start_x
@cursor_on_bar = :RIGHT
else
@cursor_on_bar = :LEFT
end
end
end
|
#drag_window(x) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 105
def drag_window(x)
@cursor = Qt::Cursor.new(Qt::ClosedHandCursor)
self.setCursor(@cursor)
temp_min = (@window_min_start + (x - @drag_start_x))
temp_max = (@window_max_start + (x - @drag_start_x))
if temp_min >= 0 and temp_max <= @graph_right_x
@window_min_x = scale_graph_to_value_x(temp_min)
@window_max_x = scale_graph_to_value_x(temp_max)
else
if temp_min < 0
@window_min_x = @x_min
@window_max_x = @x_min + @window_size
elsif temp_max > @graph_right_x
@window_max_x = scale_graph_to_value_x(@graph_right_x)
@window_min_x = @window_max_x - @window_size
end
end
@redraw_needed = true
graph()
end
|
#focusInEvent(event) ⇒ Object
379
380
381
382
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 379
def focusInEvent(event)
self.frame_color = 'gray'
update()
end
|
#focusOutEvent(event) ⇒ Object
384
385
386
387
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 384
def focusOutEvent(event)
self.frame_color = 'black'
update()
end
|
#graph(move_window = false) ⇒ Object
292
293
294
295
296
297
298
299
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 292
def graph(move_window = false)
@move_window = move_window
determine_graph_size()
scale_graph()
calculate_scaling_factors()
calculate_window_lines()
super()
end
|
#keyPressEvent(event) ⇒ Object
365
366
367
368
369
370
371
372
373
374
375
376
377
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 365
def keyPressEvent(event)
case event.key
when Qt::Key_Up
zoom_in()
when Qt::Key_Down
zoom_out()
when Qt::Key_Left
pan_left()
when Qt::Key_Right
pan_right()
end
super(event)
end
|
#leaveEvent(event) ⇒ Object
237
238
239
240
241
242
243
244
245
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 237
def leaveEvent(event)
super(event)
self.unsetCursor()
@cursor_in_window = false
@cursor_on_bar = nil
@drag_start_x = nil
@drag_bar = false
@drag_window = false
end
|
#mouseMoveEvent(event) ⇒ Object
Handles the mouse moving over the overview graph
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 220
def mouseMoveEvent(event)
super(event)
x = mapFromGlobal(self.cursor.pos).x
if @drag_window
drag_window(x)
elsif @drag_bar
drag_bar(x)
elsif @drag_start_x
drag_lasso(x)
else
show_cursor(x)
end
end
|
#mousePressEvent(event) ⇒ Object
Handles the left button being pressed in the overview graph
248
249
250
251
252
253
254
255
256
257
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 248
def mousePressEvent(event)
super(event)
@drag_start_x = mapFromGlobal(self.cursor.pos).x
@window_min_start = scale_value_to_graph_x(@window_min_x)
@window_max_start = scale_value_to_graph_x(@window_max_x)
@drag_window = true if @cursor_in_window
@drag_bar = true if @cursor_on_bar
end
|
#mouseReleaseEvent(event) ⇒ Object
Handles the left button being released
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 260
def mouseReleaseEvent(event)
self.unsetCursor()
if !(@drag_bar or @drag_window) and @drag_start_x
xpoint = scale_graph_to_value_x(@drag_start_x)
@window_min_x = xpoint - @window_size / 2
@window_max_x = xpoint + @window_size / 2
if @window_min_x < @x_min
@window_min_x = @x_min
@window_max_x = @x_min + @window_size
elsif @window_max_x > @x_max
@window_max_x = @x_max
@window_min_x = @x_max - @window_size
end
@drag_window = true
@redraw_needed = true
graph()
@drag_window = false
end
@drag_start_x = nil
@drag_bar = false
@drag_window = false
@callback.call(self) unless @callback.nil?
end
|
#pan(amount) ⇒ Object
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 333
def pan(amount)
new_window_min_x = @window_min_x + amount
new_window_max_x = @window_max_x + amount
if new_window_min_x >= @x_min and new_window_max_x <= @x_max
@window_min_x = new_window_min_x
@window_max_x = new_window_max_x
elsif new_window_min_x < @x_min
@window_min_x = @x_min
@window_max_x = @x_min + @window_size
else
@window_min_x = @x_max - @window_size
@window_max_x = @x_max
end
@drag_window = true
@redraw_needed = true
graph()
@drag_window = false
@callback.call(self) unless @callback.nil?
end
|
357
358
359
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 357
def pan_left
pan(-@window_size * DEFAULT_PAN_FACTOR)
end
|
#pan_right ⇒ Object
361
362
363
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 361
def pan_right
pan(@window_size * DEFAULT_PAN_FACTOR)
end
|
#set_window_pos(window_min_x, window_max_x, use_callback) ⇒ Object
99
100
101
102
103
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 99
def set_window_pos(window_min_x, window_max_x, use_callback)
@window_min_x = window_min_x
@window_max_x = window_max_x
@callback.call(self) if use_callback and @callback
end
|
#set_window_size(new_window_size, use_callback) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 80
def set_window_size(new_window_size, use_callback)
@window_size = new_window_size
@window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
@window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
if @lines.empty?
@window_max_x = 1.0
@window_min_x = -1.0
else
@window_min_x = @window_max_x - @window_size
end
graph(false)
@callback.call(self) if use_callback and @callback
end
|
#show_cursor(x) ⇒ Object
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 193
def show_cursor(x)
@cursor_on_bar = nil
@cursor_in_window = false
gx = scale_graph_to_value_x(x)
if (scale_value_to_graph_x(@window_min_x) - x).abs < 5
@cursor = Qt::Cursor.new(Qt::SizeHorCursor)
self.setCursor(@cursor)
@cursor_on_bar = :LEFT
elsif (scale_value_to_graph_x(@window_max_x) - x).abs < 5
@cursor = Qt::Cursor.new(Qt::SizeHorCursor)
self.setCursor(@cursor)
@cursor_on_bar = :RIGHT
elsif (@window_min_x) < gx and gx < (@window_max_x)
@cursor = Qt::Cursor.new(Qt::OpenHandCursor)
self.setCursor(@cursor)
@cursor_in_window = true
else
self.unsetCursor()
end
end
|
76
77
78
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 76
def sizeHint
return @size_hint
end
|
#zoom(zoom_factor) ⇒ Object
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 306
def zoom(zoom_factor)
@window_size = @window_size * zoom_factor
@window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
@window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
if @lines.empty?
@window_max_x = 1.0
@window_min_x = -1.0
else
center = (@window_max_x + @window_min_x) / 2
@window_min_x = center - @window_size / 2
@window_max_x = center + @window_size / 2
end
@drag_window = true
@redraw_needed = true
graph()
@drag_window = false
@callback.call(self) if @callback
end
|
325
326
327
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 325
def zoom_in
zoom(1 - DEFAULT_ZOOM_FACTOR)
end
|
329
330
331
|
# File 'lib/cosmos/gui/line_graph/overview_graph.rb', line 329
def zoom_out
zoom(1 + DEFAULT_ZOOM_FACTOR)
end
|