19 @param self this object
35 @param self this object
49 @param self this object
63 @param self this object
70 diff = a.start - b.start
93 @param self this object
101 @param self this object
103 @return index
if found
or -1
if not found
109 if key >= self.
ranges[i].start
and key <= self.
ranges[i].end:
111 elif key < self.
ranges[i].start:
119 @param self this object
126 @param self this object
131 """! Get selected ranges
132 @param self this object
133 @param start range start
135 @return the range
or and empty list
139 if s == -1
and e == -1:
142 return self.
ranges[0:e + 1]
146 return self.
ranges[s:e + 1]
148 """! Get ranges bounds
149 @param self this object
150 @param start range start
156 if s == -1
and e == -1:
161 return (s, len(self.
ranges))
166 @param self this object
172 @param self this object
188 """! Get ranges bounds
189 @param self this object
196 @param self this object
204 if key == self.
events[i].at:
206 elif key < self.
events[i].at:
214 @param self this object
215 @param event event to add
221 @param self this object
222 @param start starting event
223 @param end ending event
228 return self.
events[s:e + 1]
230 """! Get Events Bounds
231 @param self this object
232 @param start starting event
233 @param end ending event
241 @param self this object
247 @param self this object
269 @param self this object
278 @param self this object
283 if range.name == name:
286 self.
ranges.append(timeline)
289 """! Get Event String
290 @param self this object
292 @return the event string
295 if event_str.name == name:
302 @param self this object
307 if event_int.name == name:
314 @param self this object
319 """! Get Events string
320 @param self this object
326 @param self this object
331 """! Sort the ranges and events
332 @param self this object
343 @param self this object
349 (range_lo, range_hi) = range.get_bounds()
355 (ev_lo, ev_hi) = event_str.get_bounds()
361 (ev_lo, ev_hi) = event_int.get_bounds()
374 @param self: this object
379 @param self this object
381 @return the timeline
for the name
384 if timeline.name == name:
390 """! Get All Timeline
391 @param self this object
392 @return all timelines
396 """! Sort the timelines
397 @param self this object
404 @param self this object
405 @return the bounds
for all timelines
410 (t_lo, t_hi) = timeline.get_bounds()
418 @param self this object
419 @return the keys
for all ranges
423 for ranges
in timeline.get_ranges():
424 for ran
in ranges.get_all():
425 range_values[ran.value] = 1
426 return range_values.keys()
438 @param self: this object
448 @param self: this object
465 default_colors = [
Color(1, 0, 0),
Color(0, 1, 0),
Color(0, 0, 1),
Color(1, 1, 0),
Color(1, 0, 1),
Color(0, 1, 1)]
468 @param self this object
471 def add(self, name, color):
473 @param self this object
474 @param name name of the color
475 @param color color value
481 @param self this object
503 @param self this object
508 @param self this object
509 @param padding padding
515 @param self this object
516 @param legends legends
524 @param self this object
529 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1, 1)
530 ctx = cairo.Context(surface)
535 (t_width, t_height) = ctx.text_extents(legend)[2:4]
538 if item_height > line_height:
539 line_height = item_height
540 if line_used + item_width > self.
__width:
542 total_height += line_height
544 line_used += item_width
545 x = line_used - item_width
546 total_height += line_height
551 @param self this object
557 @param self this object
566 (t_width, t_height) = ctx.text_extents(legend)[2:4]
569 if item_height > line_height:
570 line_height = item_height
571 if line_used + item_width > self.
__width:
573 total_height += line_height
575 line_used += item_width
576 x = line_used - item_width
578 ctx.set_source_rgb(0, 0, 0)
579 ctx.set_line_width(2)
580 ctx.stroke_preserve()
581 ctx.set_source_rgb(self.
__colors[i].r,
585 ctx.move_to(x + self.
__padding*2, total_height + t_height)
586 ctx.set_source_rgb(0, 0, 0)
587 ctx.show_text(legend)
616 @param self this object
622 @param self this object
628 @param self this object
629 @param timelines timelines
636 """! Set Render Range
637 @param self this object
645 """! Get Data X Start
646 @param self: this object
651 """! Get Data X Start
652 @param self this object
656 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1, 1)
657 ctx = cairo.Context(surface)
658 max_text_height = ctx.text_extents("ABCDEFGHIJKLMNOPQRSTUVWXYZabcedefghijklmnopqrstuvwxyz0123456789")[3]
666 for timeline
in self.
timelines.get_all():
668 t_width = ctx.text_extents(timeline.name)[2]
669 left_width =
max(left_width, t_width)
670 for rang
in timeline.get_ranges():
671 t_width = ctx.text_extents(rang.name)[2]
672 right_width =
max(right_width, t_width)
674 for events_int
in timeline.get_events_int():
675 t_width = ctx.text_extents(events_int.name)[2]
676 right_width =
max(right_width, t_width)
678 for events_str
in timeline.get_events_str():
679 t_width = ctx.text_extents(events_str.name)[2]
680 right_width =
max(right_width, t_width)
683 left_height = left_n_lines * max_text_height + (left_n_lines - 1) * self.
padding
684 right_n_lines = range_n + eventint_n + eventstr_n
685 right_height = (right_n_lines - 1) * self.
padding + right_n_lines * max_text_height
686 right_data_height = (eventint_n + eventstr_n) * (max_text_height + 5) + range_n * 10
687 right_data_height += (right_n_lines - 1) * self.
padding
689 height =
max(left_height, right_height)
690 height =
max(height, right_data_height)
699 @param self this object
708 ctx.rel_line_to(width, height)
710 ctx.set_operator(cairo.OPERATOR_SOURCE)
711 ctx.set_line_width(1.0)
712 ctx.set_source_rgb(0, 0, 0)
716 @param self this object
726 ctx.rectangle(x, y - self.
padding / 2,
728 ctx.set_source_rgb(0.9, 0.9, 0.9)
730 last_x_drawn = int(x)
731 (lo, hi) = events.get_events_bounds(self.
start, self.
end)
732 for event
in events.events[lo:hi]:
733 real_x = int(x + (event.at - self.
start) * width / (self.
end - self.
start))
734 if real_x > last_x_drawn + 2:
735 ctx.rectangle(real_x, y, 1, 1)
736 ctx.set_source_rgb(1, 0, 0)
739 ctx.set_source_rgb(0, 0, 0)
740 ctx.show_text(str(event.value))
741 last_x_drawn = real_x
745 @param self this object
755 ctx.rectangle(x, y - self.
padding / 2,
757 ctx.set_source_rgb(0.9, 0.9, 0.9)
759 last_x_drawn = int(x - 1)
760 (lo, hi) = ranges.get_ranges_bounds(self.
start, self.
end)
761 for data_range
in ranges.ranges[lo:hi]:
762 s =
max(data_range.start, self.
start)
763 e =
min(data_range.end, self.
end)
764 x_start = int(x + (s - self.
start) * width / (self.
end - self.
start))
765 x_end = int(x + (e - self.
start) * width / (self.
end - self.
start))
766 if x_end > last_x_drawn:
767 ctx.rectangle(x_start, y, x_end - x_start, 10)
768 ctx.set_source_rgb(0, 0, 0)
769 ctx.stroke_preserve()
770 color = self.
colors.lookup(data_range.value)
771 ctx.set_source_rgb(color.r, color.g, color.b)
779 @param self this object
785 left_x_start = self.padding / 2
787 right_x_start = left_x_end + self.padding
789 data_x_start = right_x_end + self.padding / 2
790 data_x_end = self.width
791 data_width = data_x_end - data_x_start
795 for timeline
in self.
timelines.get_all():
796 (y_bearing, t_width, t_height) = ctx.text_extents(timeline.name)[1:4]
797 ctx.move_to(left_x_start, cur_y + self.
max_text_height - (t_height + y_bearing))
798 ctx.show_text(timeline.name)
799 for events_int
in timeline.get_events_int():
800 (y_bearing, t_width, t_height) = ctx.text_extents(events_int.name)[1:4]
801 ctx.move_to(right_x_start, cur_y + self.
max_text_height - (t_height + y_bearing))
802 ctx.show_text(events_int.name)
808 for events_str
in timeline.get_events_str():
809 (y_bearing, t_width, t_height) = ctx.text_extents(events_str.name)[1:4]
810 ctx.move_to(right_x_start, cur_y + self.
max_text_height - (t_height + y_bearing))
811 ctx.show_text(events_str.name)
816 for ranges
in timeline.get_ranges():
817 (y_bearing, t_width, t_height) = ctx.text_extents(ranges.name)[1:4]
818 ctx.move_to(right_x_start, cur_y + self.
max_text_height - (t_height + y_bearing))
819 ctx.show_text(ranges.name)
820 self.
draw_ranges(ctx, ranges, data_x_start, cur_y, data_width, 10)
826 bot_y = cur_y - self.
padding / 2
850 @param self this object
854 def set_bounds(self, lo, hi):
856 @param self this object
865 @param self this object
873 @param self this object
879 @param self this object
885 @param self this object
889 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1, 1)
890 ctx = cairo.Context(surface)
895 while (closest*10) < data_delta:
897 if (data_delta / closest) == 0:
899 elif (data_delta / closest) == 1:
903 start = self.
__lo - (self.
__lo % delta) + delta
904 end = self.
__hi - (self.
__hi % delta)
910 max_text_height = ctx.text_extents(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcedefghijklmnopqrstuvwxyz0123456789")[3]
912 height = max_text_height + 10
917 @param self: this object
923 @param self this object
928 start = self.__lo - (self.__lo % delta) + delta
929 end = self.__hi - (self.__hi % delta)
936 ctx.set_source_rgb(0, 0, 0)
937 ctx.set_line_width(1.0)
938 ticks = range(int(start), int(end + delta), int(delta))
941 ctx.move_to(real_x, 0)
942 ctx.line_to(real_x, 5*s)
945 (t_y_bearing, t_width, t_height) = ctx.text_extents(str(x))[1:4]
947 text_delta = t_height + t_y_bearing
949 text_delta = -t_y_bearing
950 ctx.move_to(real_x - t_width / 2, (5 + 5 + text_delta)*s)
951 ctx.show_text(str(x))
955 start = self.
__lo - (self.
__lo % delta) + delta
956 end = self.
__hi - (self.
__hi % delta)
957 for x
in range(int(start), int(end + delta), int(delta)):
959 ctx.move_to(real_x, 0)
960 ctx.line_to(real_x, 3*s)
991 @param self this object
1006 @param self: this object
1012 @param self this object
1018 """! Get Data Rectangle
1019 @param self this object
1023 x_start = self.__data.get_data_x_start()
1026 """! Get Data Rectangle
1027 @param self this object
1031 x_start = self.__data.get_data_x_start()
1036 """! Get Selection Rectangle
1037 @param self this object
1044 return (x_start, y_start, x_end - x_start, y_height)
1046 """! Scale Selection
1047 @param self this object
1055 @param self this object
1066 self.__data.set_render_range(start, end)
1071 @param self this object
1077 @param self this object
1084 @param self this object
1085 @param top_legend The legend
1091 @param self this object
1093 @param height height
1106 @param self this object
1116 @param self this object
1122 ctx.set_source_rgb(1, 1, 1)
1123 ctx.set_operator(cairo.OPERATOR_SOURCE)
1134 ctx.move_to(0, top_legend_height)
1135 ctx.line_to(self.
__width, top_legend_height)
1137 ctx.set_line_width(2)
1138 ctx.set_source_rgb(0, 0, 0)
1150 ctx.translate(self.
__data.get_data_x_start(),
1158 ctx.move_to(self.
__data.get_data_x_start(), height_used)
1161 ctx.set_source_rgb(0, 0, 0)
1162 ctx.set_line_width(2)
1166 ctx.move_to(0, height_used)
1167 ctx.line_to(self.
__width, height_used)
1169 ctx.set_line_width(2)
1170 ctx.set_source_rgb(0, 0, 0)
1177 ctx.move_to(0, height_used)
1178 ctx.line_to(self.
__data.get_data_x_start(), height_used)
1179 ctx.line_to(select_start, height_used + 20)
1180 ctx.line_to(0, height_used + 20)
1181 ctx.line_to(0, height_used)
1182 ctx.set_source_rgb(0, 0, 0)
1183 ctx.set_line_width(1)
1184 ctx.stroke_preserve()
1185 ctx.set_source_rgb(0.9, 0.9, 0.9)
1189 ctx.move_to(self.
__width, height_used)
1190 ctx.line_to(self.
__width, height_used + 20)
1191 ctx.line_to(select_end, height_used + 20)
1192 ctx.line_to(self.
__width, height_used)
1193 ctx.set_source_rgb(0, 0, 0)
1194 ctx.set_line_width(1)
1195 ctx.stroke_preserve()
1196 ctx.set_source_rgb(0.9, 0.9, 0.9)
1205 ctx.rectangle(0, height_used,
1208 ctx.rectangle(unused_end,
1212 ctx.set_source_rgb(0.9, 0.9, 0.9)
1216 ctx.move_to(unused_end, height_used)
1217 ctx.line_to(self.
__width, height_used)
1218 ctx.line_to(self.
__width, height_used + unused_height)
1219 ctx.line_to(0, height_used + unused_height)
1220 ctx.line_to(0, height_used)
1221 ctx.line_to(unused_start, height_used)
1223 ctx.set_line_width(2)
1224 ctx.set_source_rgb(0, 0, 0)
1226 ctx.move_to(unused_start, height_used)
1227 ctx.line_to(unused_end, height_used)
1229 ctx.set_line_width(1)
1230 ctx.set_source_rgb(0.9, 0.9, 0.9)
1235 ctx.move_to(
max(unused_start, 2), height_used)
1236 ctx.rel_line_to(0, unused_height)
1237 ctx.move_to(
min(unused_end, self.
__width - 2), height_used)
1238 ctx.rel_line_to(0, unused_height)
1239 ctx.set_dash([5], 0)
1240 ctx.set_source_rgb(0, 0, 0)
1241 ctx.set_line_width(1)
1247 ctx.translate(0, height_used)
1285 @param self this object
1288 super(GtkGraphicRenderer, self).__init__()
1295 self.add_events(gtk.gdk.POINTER_MOTION_MASK)
1296 self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
1297 self.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
1298 self.connect(
"expose_event", self.
expose)
1304 """! Set Smaller Zoom
1305 @param self this object
1308 (start, end) = self.__data.get_range()
1309 self.__data.set_range(start, start + (end - start)*2)
1313 """! Set Bigger Zoom
1314 @param self this object
1317 (start, end) = self.__data.get_range()
1318 self.__data.set_range(start, start + (end - start) / 2)
1323 @param self this object
1324 @param filename file name
1327 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32,
1329 self.__data.get_height())
1332 surface.write_to_png(filename)
1335 @param self this object
1336 @param widget widget
1338 @return true
if button has been pressed otherwise false
1340 (x, y, width, height) = self.__data.get_selection_rectangle()
1341 (d_x, d_y, d_width, d_height) = self.__data.get_data_rectangle()
1342 if event.y > y
and event.y < y + height:
1343 if abs(event.x - x) < 5:
1346 if abs(event.x - (x + width)) < 5:
1349 if event.x > x
and event.x < x + width:
1354 if event.y > d_y
and event.y < (d_y + d_height):
1355 if event.x > d_x
and event.x < (d_x + d_width):
1363 @param self this object
1364 @param widget widget
1366 @return true
if button was released otherwise false
1371 right = self.
__data.get_range()[1]
1372 self.
__data.set_range(left, right)
1379 left = self.
__data.get_range()[0]
1380 self.
__data.set_range(left, right)
1387 (left, right) = self.
__data.get_range()
1388 self.
__data.set_range(left + delta, right + delta)
1397 @param self this object
1398 @param widget widget
1400 @return true
if moving otherwise false
1402 (x, y, width, height) = self.__data.get_selection_rectangle()
1406 elif event.x >= x + width:
1410 self.queue_draw_area(0, int(y), int(self.
__width), int(height))
1419 self.queue_draw_area(0, int(y), int(self.
__width), int(height))
1426 elif event.x > cur_e:
1430 self.queue_draw_area(0, int(y), int(self.
__width), int(height))
1435 (left, right) = self.
__data.get_range()
1436 self.
__data.set_range(left + delta, right + delta)
1441 (d_x, d_y, d_width, d_height) = self.
__data.get_data_rectangle()
1442 if event.y > y
and event.y < y + height:
1443 if abs(event.x - x) < 5
or abs(event.x - (x + width)) < 5:
1444 widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.SB_H_DOUBLE_ARROW))
1446 if event.x > x
and event.x < x + width:
1447 widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR))
1449 if event.y > d_y
and event.y < (d_y + d_height):
1450 if event.x > d_x
and event.x < (d_x + d_width):
1451 widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR))
1453 widget.window.set_cursor(
None)
1457 @param self this object
1458 @param widget widget
1459 @param allocation allocation
1464 self.__data.layout(allocation.width, allocation.height)
1469 @param self this object
1470 @param widget widget
1477 self.
__data.get_height())
1481 ctx = widget.window.cairo_create()
1482 ctx.rectangle(event.area.x, event.area.y,
1483 event.area.width, event.area.height)
1487 (x, y, width, height) = self.
__data.get_selection_rectangle()
1490 ctx.rel_line_to(0, height)
1492 ctx.set_line_width(1)
1493 ctx.set_source_rgb(0, 0, 0)
1497 ctx.rel_line_to(0, height)
1499 ctx.set_line_width(1)
1500 ctx.set_source_rgb(0, 0, 0)
1504 left_x = x + delta_x
1505 ctx.move_to(x + delta_x, y)
1506 ctx.rel_line_to(0, height)
1508 ctx.move_to(x + width + delta_x, y)
1509 ctx.rel_line_to(0, height)
1511 ctx.set_source_rgb(0, 0, 0)
1512 ctx.set_line_width(1)
1526 @param self this object
1531 @param self this object
1532 @param graphic graphic
1535 window = gtk.Window()
1537 window.set_default_size(200, 200)
1542 vbox.pack_end(render, True,
True, 0)
1544 vbox.pack_start(hbox,
False,
False, 0)
1545 smaller_zoom = gtk.Button(
"Zoom Out")
1547 hbox.pack_start(smaller_zoom)
1548 bigger_zoom = gtk.Button(
"Zoom In")
1550 hbox.pack_start(bigger_zoom)
1551 output_png = gtk.Button(
"Output Png")
1553 hbox.pack_start(output_png)
1554 window.connect(
'destroy', gtk.main_quit)
1559 """! Set Smaller Callback
1560 @param self this object
1561 @param widget widget
1566 """! Set Bigger Callback
1567 @param self this object
1568 @param widget widget
1573 """! Output PNG Callback
1574 @param self this object
1575 @param widget widget
1578 dialog = gtk.FileChooserDialog("Output Png", self.
__window,
1579 gtk.FILE_CHOOSER_ACTION_SAVE, (
"Save", 1))
1581 dialog.set_default_response(1)
1585 """! Dialog Response Callback
1586 @param self this object
1587 @param widget widget
1588 @param response response
1592 filename = self.
__dialog.get_filename()
1601 m1 = re.compile(
'range ([^ ]+) ([^ ]+) ([^ ]+) ([0-9]+) ([0-9]+)')
1602 m2 = re.compile(
'event-str ([^ ]+) ([^ ]+) ([^ ]+) ([0-9]+)')
1603 m3 = re.compile(
'event-int ([^ ]+) ([^ ]+) ([0-9]+) ([0-9]+)')
1604 m4 = re.compile(
'color ([^ ]+) #([a-fA-F0-9]{2,2})([a-fA-F0-9]{2,2})([a-fA-F0-9]{2,2})')
1606 with open(filename, encoding=
'utf-8')
as fh:
1607 for line
in fh.readlines():
1610 line_name = m.group(1)
1611 timeline = timelines.get(m.group(1))
1612 rang = timeline.get_range(m.group(2))
1614 data_range.value = m.group(3)
1615 data_range.start = int(m.group(4))
1616 data_range.end = int(m.group(5))
1617 rang.add_range(data_range)
1621 line_name = m.group(1)
1622 timeline = timelines.get(m.group(1))
1623 ev = timeline.get_event_str(m.group(2))
1625 event.value = m.group(3)
1626 event.at = int(m.group(4))
1631 line_name = m.group(1)
1632 timeline = timelines.get(m.group(1))
1633 ev = timeline.get_event_int(m.group(2))
1635 event.value = int(m.group(3))
1636 event.at = int(m.group(4))
1642 r = int(m.group(2), 16)
1643 g = int(m.group(3), 16)
1644 b = int(m.group(4), 16)
1645 color =
Color(r / 255, g / 255, b / 255)
1646 colors.add(m.group(1), color)
1649 return (colors, timelines)
1653 (colors, timelines) =
read_data(sys.argv[1])
1654 (lower_bound, upper_bound) = timelines.get_bounds()
1657 range_values = timelines.get_all_range_values()
1659 for range_value
in range_values:
1660 range_colors.append(colors.lookup(range_value))
1661 top_legend.set_legends(range_values,
1663 graphic.set_top_legend(top_legend)
1665 data.set_timelines(timelines, colors)
1666 graphic.set_data(data)
1669 range_mid = (upper_bound - lower_bound) / 2
1670 range_width = (upper_bound - lower_bound) / 10
1671 range_lo = range_mid - range_width / 2
1672 range_hi = range_mid + range_width / 2
1673 graphic.set_range(range_lo, range_hi)
1676 main_window.run(graphic)
def __init__(self, r=0.0, g=0.0, b=0.0)
Initializer.
def set(self, r, g, b)
Set color.
def __init__(self)
Initializer.
def lookup(self, name)
Lookup name.
def add(self, name, color)
Add.
list default_colors
default colors XXX add more
def __init__(self, start=0, end=0, value='')
Initializer.
def __init__(self, at=0, value=0.0)
Initializer.
def __init__(self, at=0, value=0.0)
Initializer.
def __init__(self, at=0, value='')
Initializer.
def set_top_legend(self, top_legend)
Set Top Legend.
def get_range(self)
Get Range.
def get_selection_rectangle(self)
Get Selection Rectangle.
def set_range(self, start, end)
Set Range.
def get_height(self)
Get Height.
def get_data_rectangle(self)
Get Data Rectangle.
def scale_selection(self, x)
Scale Selection.
def layout(self, width, height)
Set Layout.
def set_data(self, data)
Set Date.
def __x_pixel(self, x, width)
X Pixel.
def __init__(self, start, end)
Initializer.
def get_width(self)
Get Width.
def scale_data(self, x)
Get Data Rectangle.
GtkGraphicRenderer class.
__force_full_redraw
full redraw
__moving_top_start
moving top start
def set_smaller_zoom(self)
Set Smaller Zoom.
def motion_notify(self, widget, event)
Motion Notify.
__moving_both_cur
moving both cur
__moving_right
moving right
__moving_right_cur
moving right cur
__buffer_surface
buffer surface
__moving_top_cur
moving top cur
def size_allocate(self, widget, allocation)
Size Allocate.
__moving_both_start
moving both start
def set_bigger_zoom(self)
Set Bigger Zoom.
def button_press(self, widget, event)
Button Press.
def button_release(self, widget, event)
Button Release.
__moving_left_cur
moving left cur
def output_png(self, filename)
Output PNG.
def __init__(self, data)
Initializer.
def expose(self, widget, event)
Expose.
def run(self, graphic)
Run function.
def __dialog_response_cb(self, widget, response)
Dialog Response Callback.
def __init__(self)
Initializer.
def __set_smaller_cb(self, widget)
Set Smaller Callback.
def __output_png_cb(self, widget)
Output PNG Callback.
def __set_bigger_cb(self, widget)
Set Bigger Callback.
def layout(self, width)
Layout.
max_text_height
maximum text height
def get_position(self, x)
Get Position.
def set_bot(self)
Set Bottom.
def set_top(self)
Set Top.
def __init__(self)
Initializer.
def get_height(self)
Get Height.
def __init__(self, name='')
Initializer.
def get_bounds(self)
Get bounds.
def add_range(self, range)
Add range.
def __search(self, key)
Search.
def get_ranges_bounds(self, start, end)
Get ranges bounds.
def get_ranges(self, start, end)
Get selected ranges.
def sort(self)
Sort ranges.
def get_all(self)
Get all ranges.
def add_event(self, event)
Add Event.
def get_events(self, start, end)
Get Events.
def __init__(self, name='')
Get ranges bounds.
def get_events_bounds(self, start, end)
Get Events Bounds.
def sort(self)
Sort function.
def get_bounds(self)
Get Bounds.
def __search(self, key)
Search function.
def get_ranges(self)
Get Ranges.
def get_range(self, name)
Get range.
def get_event_int(self, name)
Get Event Int.
def get_events_int(self)
Get Events int.
def get_event_str(self, name)
Get Event String.
def __init__(self, name='')
Initializer.
def get_bounds(self)
Get Bounds.
def get_events_str(self)
Get Events string.
def sort(self)
Sort the ranges and events.
def get_bounds(self)
Get Bounds.
def get(self, name)
Get Timeline.
def get_all_range_values(self)
Get All Ranges.
def get_all(self)
Get All Timeline.
def sort(self)
Sort the timelines.
def set_timelines(self, timelines, colors)
Set Timelines.
grey_background
grey background
def draw_line(self, ctx, x, y, width, height)
Draw Line.
def get_data_x_start(self)
Get Data X Start.
def set_render_range(self, start, end)
Set Render Range.
def layout(self, width)
Get Data X Start.
max_text_height
maximum text height
def draw_events(self, ctx, events, x, y, width, height)
Draw Event.
def __init__(self)
Initializer.
def get_height(self)
Get Height.
def draw_ranges(self, ctx, ranges, x, y, width, height)
Draw Ranges.
def get_height(self)
Set padding.
def layout(self, width)
Set padding.
def __init__(self)
Initializer.
def draw(self, ctx)
Set padding.
def set_padding(self, padding)
Set padding.
def set_legends(self, legends, colors)
Set padding.
def read_data(filename)
read_data function