class Roby::GUI::ChronicleWidget::TaskLayout
Attributes
add_point[R]
base_height[R]
base_time[R]
end_point[R]
event_height[R]
event_max_x[R]
events[R]
finalization_point[R]
fm[R]
messages[RW]
start_point[R]
state[R]
task[R]
time_to_pixel[R]
title[RW]
Public Class Methods
new(task, base_time, time_to_pixel, fm)
click to toggle source
# File lib/roby/gui/chronicle_widget.rb, line 645 def initialize(task, base_time, time_to_pixel, fm) @task = task @base_time = base_time @time_to_pixel = time_to_pixel @fm = fm @event_height = [2 * EVENT_CIRCLE_RADIUS, fm.height].max @add_point = time_to_pixel * (task.addition_time - base_time) @start_point = nil @end_point = nil @finalization_point = nil @state = :pending @messages = Array.new @events = Array.new @event_max_x = Array.new @base_height = event_height update end
Public Instance Methods
append_event(event, event_height)
click to toggle source
# File lib/roby/gui/chronicle_widget.rb, line 698 def append_event(event, event_height) event_x = Integer(time_to_pixel * (event.time - base_time)) event_current_level = nil event_max_x.each_with_index do |x, idx| if x < event_x - EVENT_CIRCLE_RADIUS event_current_level = idx break end end event_current_level ||= event_max_x.size event_y = event_current_level * event_height event_max_x[event_current_level] = event_x + 2 * EVENT_CIRCLE_RADIUS + fm.width(event.symbol.to_s) events << [event.time, event_x, event_y, event.symbol.to_s] end
events_in_range(display_start_time, display_end_time)
click to toggle source
# File lib/roby/gui/chronicle_widget.rb, line 714 def events_in_range(display_start_time, display_end_time) if !@time_first_event return elsif @time_first_event > display_end_time return elsif @time_last_event < display_start_time return else result = [] events.each do |ev| time = ev.first if time > display_start_time if time < display_end_time result << ev else break end end end result if !result.empty? end end
height(display_start_time, display_end_time)
click to toggle source
# File lib/roby/gui/chronicle_widget.rb, line 737 def height(display_start_time, display_end_time) if events = events_in_range(display_start_time, display_end_time) max_event_y = events.max_by { |_, _, y, _| y } max_event_y = max_event_y[2] end (max_event_y || 0) + (messages.size + 1) * fm.height end
update()
click to toggle source
# File lib/roby/gui/chronicle_widget.rb, line 665 def update return if @finalization_point history_size = events.size return if !task.finalization_time && task.history.size == history_size last_event = task.last_event if !last_event @state = :pending else @state = GUI.task_state_at(task, last_event.time) @time_last_event = last_event.time if state != :running end_time = last_event.time end end if start_time = task.start_time @time_first_event = start_time @start_point = time_to_pixel * (start_time - base_time) end if end_time @end_point = time_to_pixel * (end_time - base_time) end if finalization_time = task.finalization_time @finalization_point = time_to_pixel * (finalization_time - base_time) end task.history[history_size..-1].each do |event| append_event(event, event_height) end end