author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Mon, 16 Oct 2006 13:12:22 +0200 | |
changeset 128 | b48c310f4e24 |
parent 124 | c0d0f7bebb73 |
child 136 | 4faf1726e8ff |
permissions | -rw-r--r-- |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
124
c0d0f7bebb73
add magic emacs incantation for python
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
12
diff
changeset
|
2 |
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
import cairo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
import sys |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
import re |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
import gtk |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
class DataRange: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
def __init__ (self, start = 0, end = 0, value = ''): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
self.start = start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
self.end = end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
self.value = value |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
class EventString: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
def __init__ (self, at = 0, value = ''): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
self.at = at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
self.value = value |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
class EventFloat: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
def __init__ (self, at = 0, value = 0.0): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
self.at = at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
self.value = value |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
class EventInt: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
def __init__ (self, at = 0, value = 0.0): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
self.at = at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
self.value = value |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
def ranges_cmp (a, b): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
return a.start - b.start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
def events_cmp (a,b): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
return a.at - b.at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
class TimelineDataRange: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
def __init__ (self, name = ''): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
self.name = name |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
self.ranges = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
def __search (self, key): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
l = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
u = len (self.ranges)-1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
while l <= u: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
i = int ((l+u)/2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
if key >= self.ranges[i].start and key <= self.ranges[i].end: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
return i |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
elif key < self.ranges[i].start: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
u = i - 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
# key > self.ranges[i].end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
l = i + 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
return -1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
def add_range (self, range): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
self.ranges.append (range) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
def get_all (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
return self.ranges |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
54 |
def get_ranges (self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
s = self.__search (start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
e = self.__search (end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
57 |
if s == -1 and e == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
return [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
elif s == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
return self.ranges[0:e+1] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
61 |
elif e == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
62 |
return self.ranges[s:len (self.ranges)] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
63 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
64 |
return self.ranges[s:e+1] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
65 |
def get_ranges_bounds (self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
66 |
s = self.__search (start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
67 |
e = self.__search (end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
if s == -1 and e == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
return (0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
elif s == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
return (0,e+1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
elif e == -1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
73 |
return (s, len (self.ranges)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
return (s,e+1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
def sort (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
77 |
self.ranges.sort (ranges_cmp) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
def get_bounds (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
if len (self.ranges) > 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
lo = self.ranges[0].start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
hi = self.ranges[len (self.ranges)-1].end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
return (lo, hi) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
return (0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
class TimelineEvent: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
def __init__ (self, name = ''): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
self.name = name |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
self.events = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
def __search (self, key): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
l = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
u = len (self.events)-1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
while l <= u: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
i = int ((l+u)/2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
if key == self.events[i].at: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
return i |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
elif key < self.events[i].at: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
u = i - 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
# key > self.events[i].at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
l = i + 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
return l |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
def add_event (self, event): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
self.events.append (event) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
def get_events (self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
s = self.__search (start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
e = self.__search (end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
return self.events[s:e+1] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
def get_events_bounds (self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
s = self.__search (start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
110 |
e = self.__search (end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
111 |
return (s, e+1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
112 |
def sort (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
self.events.sort (events_cmp) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
def get_bounds (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
115 |
if len (self.events) > 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
116 |
lo = self.events[0].at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
117 |
hi = self.events[-1].at |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
return (lo,hi) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
119 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
120 |
return (0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
121 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
122 |
class Timeline: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
123 |
def __init__ (self, name = ''): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
124 |
self.ranges = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
125 |
self.event_str = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
126 |
self.event_int = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
127 |
self.name = name |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
128 |
def get_range (self, name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
129 |
for range in self.ranges: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
130 |
if range.name == name: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
131 |
return range |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
132 |
timeline = TimelineDataRange (name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
133 |
self.ranges.append (timeline) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
return timeline |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
135 |
def get_event_str (self, name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
136 |
for event_str in self.event_str: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
137 |
if event_str.name == name: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
138 |
return event_str |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
139 |
timeline = TimelineEvent (name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
140 |
self.event_str.append (timeline) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
141 |
return timeline |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
142 |
def get_event_int (self, name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
143 |
for event_int in self.event_int: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
144 |
if event_int.name == name: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
145 |
return event_int |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
146 |
timeline = TimelineEvent (name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
147 |
self.event_int.append (timeline) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
148 |
return timeline |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
149 |
def get_ranges (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
150 |
return self.ranges |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
151 |
def get_events_str (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
152 |
return self.event_str |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
153 |
def get_events_int (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
154 |
return self.event_int |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
155 |
def sort (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
156 |
for range in self.ranges: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
157 |
range.sort () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
158 |
for event in self.event_int: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
159 |
event.sort () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
160 |
for event in self.event_str: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
161 |
event.sort () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
162 |
def get_bounds (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
163 |
lo = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
164 |
hi = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
165 |
for range in self.ranges: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
166 |
(range_lo, range_hi) = range.get_bounds () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
167 |
if range_lo < lo: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
168 |
lo = range_lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
169 |
if range_hi > hi: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
170 |
hi = range_hi |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
171 |
for event_str in self.event_str: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
172 |
(ev_lo, ev_hi) = event_str.get_bounds () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
173 |
if ev_lo < lo: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
174 |
lo = ev_lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
175 |
if ev_hi > hi: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
176 |
hi = ev_hi |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
177 |
for event_int in self.event_int: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
178 |
(ev_lo, ev_hi) = event_int.get_bounds () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
179 |
if ev_lo < lo: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
180 |
lo = ev_lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
181 |
if ev_hi > hi: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
182 |
hi = ev_hi |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
183 |
return (lo, hi) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
184 |
class Timelines: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
185 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
186 |
self.timelines = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
187 |
def get (self, name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
188 |
for timeline in self.timelines: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
189 |
if timeline.name == name: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
190 |
return timeline |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
191 |
timeline = Timeline (name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
192 |
self.timelines.append (timeline) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
193 |
return timeline |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
194 |
def get_all (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
195 |
return self.timelines |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
196 |
def sort (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
197 |
for timeline in self.timelines: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
198 |
timeline.sort () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
199 |
def get_bounds (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
200 |
lo = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
201 |
hi = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
202 |
for timeline in self.timelines: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
203 |
(t_lo, t_hi) = timeline.get_bounds () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
204 |
if t_lo < lo: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
205 |
lo = t_lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
206 |
if t_hi > hi: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
207 |
hi = t_hi |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
208 |
return (lo, hi) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
209 |
def get_all_range_values (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
210 |
range_values = {} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
211 |
for timeline in self.timelines: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
212 |
for ranges in timeline.get_ranges (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
213 |
for ran in ranges.get_all (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
214 |
range_values[ran.value] = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
215 |
return range_values.keys () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
216 |
class Color: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
217 |
def __init__ (self, r = 0.0, g = 0.0, b = 0.0): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
218 |
self.r = r |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
219 |
self.g = g |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
220 |
self.b = b |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
221 |
def set (self, r, g, b): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
222 |
self.r = r |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
223 |
self.g = g |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
224 |
self.b = b |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
225 |
class Colors: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
226 |
# XXX add more |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
227 |
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)] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
228 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
229 |
self.__colors = {} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
230 |
def add (self, name, color): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
231 |
self.__colors[name] = color |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
232 |
def lookup (self, name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
233 |
if not self.__colors.has_key (name): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
234 |
self.add (name, self.default_colors.pop ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
235 |
return self.__colors.get(name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
236 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
237 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
238 |
class TopLegendRenderer: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
239 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
240 |
self.__padding = 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
241 |
def set_padding (self, padding): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
242 |
self.__padding = padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
243 |
def set_legends (self, legends, colors): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
244 |
self.__legends = legends |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
245 |
self.__colors = colors |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
246 |
def layout (self, width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
247 |
self.__width = width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
248 |
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1,1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
249 |
ctx = cairo.Context(surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
250 |
line_height = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
251 |
total_height = self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
252 |
line_used = self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
253 |
for legend in self.__legends: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
254 |
(t_width, t_height) = ctx.text_extents (legend)[2:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
255 |
item_width = self.__padding + self.__padding + t_width + self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
256 |
item_height = t_height + self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
257 |
if item_height > line_height: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
258 |
line_height = item_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
259 |
if line_used + item_width > self.__width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
260 |
line_used = self.__padding + item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
261 |
total_height += line_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
262 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
263 |
line_used += item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
264 |
x = line_used - item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
265 |
total_height += line_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
266 |
self.__height = total_height |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
267 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
268 |
def get_height (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
269 |
return self.__height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
270 |
def draw (self, ctx): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
271 |
i = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
272 |
line_height = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
273 |
total_height = self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
274 |
line_used = self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
275 |
for legend in self.__legends: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
276 |
(t_width, t_height) = ctx.text_extents (legend)[2:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
277 |
item_width = self.__padding + self.__padding + t_width + self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
278 |
item_height = t_height + self.__padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
279 |
if item_height > line_height: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
280 |
line_height = item_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
281 |
if line_used + item_width > self.__width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
282 |
line_used = self.__padding + item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
283 |
total_height += line_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
284 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
285 |
line_used += item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
286 |
x = line_used - item_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
287 |
ctx.rectangle (x, total_height, self.__padding, self.__padding) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
288 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
289 |
ctx.set_line_width (2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
290 |
ctx.stroke_preserve () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
291 |
ctx.set_source_rgb (self.__colors[i].r, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
292 |
self.__colors[i].g, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
293 |
self.__colors[i].b) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
294 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
295 |
ctx.move_to (x+self.__padding*2, total_height+t_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
296 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
297 |
ctx.show_text (legend) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
298 |
i += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
299 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
300 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
301 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
302 |
class TimelinesRenderer: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
303 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
304 |
self.padding = 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
305 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
306 |
def get_height (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
307 |
return self.height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
308 |
def set_timelines (self, timelines, colors): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
309 |
self.timelines = timelines |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
310 |
self.colors = colors |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
311 |
def set_render_range (self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
312 |
self.start = start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
313 |
self.end = end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
314 |
def get_data_x_start (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
315 |
return self.padding / 2 + self.left_width + self.padding + self.right_width + self.padding/2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
316 |
def layout (self, width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
317 |
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1,1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
318 |
ctx = cairo.Context(surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
319 |
max_text_height = ctx.text_extents ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcedefghijklmnopqrstuvwxyz0123456789")[3] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
320 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
321 |
left_width = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
322 |
right_width = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
323 |
left_n_lines = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
324 |
range_n = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
325 |
eventint_n = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
326 |
eventstr_n = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
327 |
for timeline in self.timelines.get_all (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
328 |
left_n_lines += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
329 |
t_width = ctx.text_extents (timeline.name)[2] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
330 |
left_width = max (left_width, t_width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
331 |
for rang in timeline.get_ranges (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
332 |
t_width = ctx.text_extents (rang.name)[2] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
333 |
right_width = max (right_width, t_width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
334 |
range_n += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
335 |
for events_int in timeline.get_events_int (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
336 |
t_width = ctx.text_extents (events_int.name)[2] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
337 |
right_width = max (right_width, t_width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
338 |
eventint_n += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
339 |
for events_str in timeline.get_events_str (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
340 |
t_width = ctx.text_extents (events_str.name)[2] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
341 |
right_width = max (right_width, t_width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
342 |
eventstr_n += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
343 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
344 |
left_height = left_n_lines * max_text_height + (left_n_lines - 1) * self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
345 |
right_n_lines = range_n + eventint_n + eventstr_n |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
346 |
right_height = (right_n_lines - 1) * self.padding + right_n_lines * max_text_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
347 |
right_data_height = (eventint_n + eventstr_n) * (max_text_height + 5) + range_n * 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
348 |
right_data_height += (right_n_lines - 1) * self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
349 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
350 |
height = max (left_height, right_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
351 |
height = max (height, right_data_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
352 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
353 |
self.left_width = left_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
354 |
self.right_width = right_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
355 |
self.max_text_height = max_text_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
356 |
self.width = width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
357 |
self.height = height + self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
358 |
def draw_line (self, ctx, x, y, width, height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
359 |
ctx.move_to (x, y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
360 |
ctx.rel_line_to (width, height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
361 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
362 |
ctx.set_operator (cairo.OPERATOR_SOURCE) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
363 |
ctx.set_line_width (1.0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
364 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
365 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
366 |
def draw_events (self, ctx, events, x, y, width, height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
367 |
if (self.grey_background % 2) == 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
368 |
ctx.rectangle (x, y-self.padding/2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
369 |
width, height+self.padding) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
370 |
ctx.set_source_rgb (0.9,0.9,0.9) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
371 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
372 |
last_x_drawn = int (x) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
373 |
(lo, hi) = events.get_events_bounds (self.start, self.end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
374 |
for event in events.events[lo:hi]: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
375 |
real_x = int (x + (event.at - self.start) * width / (self.end - self.start)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
376 |
if real_x > last_x_drawn+2: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
377 |
ctx.rectangle (real_x, y, 1, 1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
378 |
ctx.set_source_rgb (1,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
379 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
380 |
ctx.move_to (real_x, y+self.max_text_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
381 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
382 |
ctx.show_text (str (event.value)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
383 |
last_x_drawn = real_x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
384 |
self.grey_background += 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
385 |
def draw_ranges (self, ctx, ranges, x, y, width, height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
386 |
if (self.grey_background % 2) == 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
387 |
ctx.rectangle (x, y-self.padding/2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
388 |
width, height+self.padding) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
389 |
ctx.set_source_rgb (0.9,0.9,0.9) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
390 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
391 |
last_x_drawn = int (x-1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
392 |
(lo, hi) = ranges.get_ranges_bounds (self.start, self.end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
393 |
for data_range in ranges.ranges[lo:hi]: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
394 |
s = max (data_range.start, self.start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
395 |
e = min (data_range.end, self.end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
396 |
x_start = int (x + (s - self.start) * width / (self.end - self.start)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
397 |
x_end = int (x + (e - self.start) * width / (self.end - self.start)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
398 |
if x_end > last_x_drawn: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
399 |
ctx.rectangle (x_start, y, x_end - x_start, 10) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
400 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
401 |
ctx.stroke_preserve () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
402 |
color = self.colors.lookup (data_range.value) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
403 |
ctx.set_source_rgb (color.r, color.g, color.b) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
404 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
405 |
last_x_drawn = x_end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
406 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
407 |
self.grey_background += 1 |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
408 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
409 |
def draw (self, ctx): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
410 |
timeline_top = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
411 |
top_y = self.padding / 2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
412 |
left_x_start = self.padding / 2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
413 |
left_x_end = left_x_start + self.left_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
414 |
right_x_start = left_x_end + self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
415 |
right_x_end = right_x_start + self.right_width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
416 |
data_x_start = right_x_end + self.padding /2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
417 |
data_x_end = self.width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
418 |
data_width = data_x_end - data_x_start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
419 |
cur_y = top_y |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
420 |
self.draw_line (ctx, 0, 0, self.width, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
421 |
self.grey_background = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
422 |
for timeline in self.timelines.get_all (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
423 |
(y_bearing,t_width,t_height) = ctx.text_extents (timeline.name)[1:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
424 |
ctx.move_to (left_x_start, cur_y + self.max_text_height - (t_height+y_bearing)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
425 |
ctx.show_text (timeline.name); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
426 |
for events_int in timeline.get_events_int (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
427 |
(y_bearing, t_width, t_height) = ctx.text_extents (events_int.name)[1:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
428 |
ctx.move_to (right_x_start, cur_y + self.max_text_height - (t_height+y_bearing)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
429 |
ctx.show_text (events_int.name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
430 |
self.draw_events (ctx, events_int, data_x_start, cur_y, data_width, self.max_text_height+5) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
431 |
cur_y += self.max_text_height + 5 + self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
432 |
self.draw_line (ctx, right_x_start-self.padding/2, cur_y - self.padding / 2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
433 |
self.right_width + self.padding, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
434 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
435 |
for events_str in timeline.get_events_str (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
436 |
(y_bearing, t_width, t_height) = ctx.text_extents (events_str.name)[1:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
437 |
ctx.move_to (right_x_start, cur_y + self.max_text_height - (t_height+y_bearing)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
438 |
ctx.show_text (events_str.name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
439 |
self.draw_events (ctx, events_str, data_x_start, cur_y, data_width, self.max_text_height+5) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
440 |
cur_y += self.max_text_height + 5 + self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
441 |
self.draw_line (ctx, right_x_start-self.padding/2, cur_y - self.padding / 2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
442 |
self.right_width + self.padding, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
443 |
for ranges in timeline.get_ranges (): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
444 |
(y_bearing, t_width, t_height) = ctx.text_extents (ranges.name)[1:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
445 |
ctx.move_to (right_x_start, cur_y + self.max_text_height - (t_height+y_bearing)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
446 |
ctx.show_text (ranges.name) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
447 |
self.draw_ranges (ctx, ranges, data_x_start, cur_y, data_width, 10) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
448 |
cur_y += self.max_text_height + self.padding |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
449 |
self.draw_line (ctx, right_x_start-self.padding/2, cur_y - self.padding / 2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
450 |
self.right_width + self.padding, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
451 |
self.draw_line (ctx, 0, cur_y - self.padding / 2, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
452 |
self.width, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
453 |
bot_y = cur_y - self.padding / 2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
454 |
self.draw_line (ctx, left_x_end+self.padding/2, 0, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
455 |
0, bot_y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
456 |
self.draw_line (ctx, right_x_end+self.padding/2, 0, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
457 |
0, bot_y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
458 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
459 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
460 |
class ScaleRenderer: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
461 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
462 |
self.__top = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
463 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
464 |
def set_bounds (self, lo, hi): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
465 |
self.__lo = lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
466 |
self.__hi = hi |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
467 |
def get_position (self, x): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
468 |
real_x = (x - self.__lo ) * self.__width / (self.__hi - self.__lo) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
469 |
return real_x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
470 |
def set_top (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
471 |
self.__top = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
472 |
def set_bot (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
473 |
self.__top = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
474 |
def layout (self, width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
475 |
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1,1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
476 |
ctx = cairo.Context(surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
477 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
478 |
# calculate scale delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
479 |
data_delta = self.__hi - self.__lo |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
480 |
closest = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
481 |
while (closest*10) < data_delta: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
482 |
closest *= 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
483 |
if (data_delta / closest) == 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
484 |
delta = closest |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
485 |
elif (data_delta / closest) == 1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
486 |
delta = closest / 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
487 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
488 |
delta = closest |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
489 |
start = self.__lo - (self.__lo % delta) + delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
490 |
end = self.__hi - (self.__hi % delta) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
491 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
492 |
self.__delta = delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
493 |
self.__width = width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
494 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
495 |
# calculate text height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
496 |
max_text_height = ctx.text_extents ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcedefghijklmnopqrstuvwxyz0123456789")[3] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
497 |
self.max_text_height = max_text_height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
498 |
height = max_text_height + 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
499 |
self.__height = height |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
500 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
501 |
def get_height (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
502 |
return self.__height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
503 |
def draw (self, ctx): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
504 |
delta = self.__delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
505 |
start = self.__lo - (self.__lo % delta) + delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
506 |
end = self.__hi - (self.__hi % delta) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
507 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
508 |
if self.__top == 1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
509 |
s = -1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
510 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
511 |
s = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
512 |
# print scale points |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
513 |
ctx.set_source_rgb (0, 0, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
514 |
ctx.set_line_width (1.0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
515 |
ticks = range (int (start), int (end + delta), int (delta)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
516 |
for x in ticks: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
517 |
real_x = (x - self.__lo ) * self.__width / (self.__hi - self.__lo) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
518 |
ctx.move_to (real_x, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
519 |
ctx.line_to (real_x, 5*s) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
520 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
521 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
522 |
(t_y_bearing, t_width, t_height) = ctx.text_extents (str (x))[1:4] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
523 |
if self.__top: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
524 |
text_delta = t_height + t_y_bearing |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
525 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
526 |
text_delta = -t_y_bearing |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
527 |
ctx.move_to (real_x - t_width/2, (5 + 5 + text_delta)*s) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
528 |
ctx.show_text (str (x)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
529 |
# draw subticks |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
530 |
delta /= 10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
531 |
if delta > 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
532 |
start = self.__lo - (self.__lo % delta) + delta |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
533 |
end = self.__hi - (self.__hi % delta) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
534 |
for x in range (int (start), int (end + delta), int (delta)): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
535 |
real_x = (x - self.__lo ) * self.__width / (self.__hi - self.__lo) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
536 |
ctx.move_to (real_x, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
537 |
ctx.line_to (real_x, 3*s) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
538 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
539 |
ctx.stroke () |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
540 |
|
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
541 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
542 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
543 |
class GraphicRenderer: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
544 |
def __init__(self, start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
545 |
self.__start = float (start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
546 |
self.__end = float (end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
547 |
self.__mid_scale = ScaleRenderer () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
548 |
self.__mid_scale.set_top () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
549 |
self.__bot_scale = ScaleRenderer () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
550 |
self.__bot_scale.set_bounds (start, end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
551 |
self.__bot_scale.set_bot () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
552 |
self.__width = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
553 |
self.__height = 1 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
554 |
def get_width (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
555 |
return self.__width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
556 |
def get_height (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
557 |
return self.__height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
558 |
# return x, y, width, height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
559 |
def get_data_rectangle (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
560 |
y_start = self.__top_legend.get_height () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
561 |
x_start = self.__data.get_data_x_start () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
562 |
return (x_start, y_start, self.__width - x_start, self.__data.get_height ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
563 |
def scale_data (self, x): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
564 |
x_start = self.__data.get_data_x_start () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
565 |
x_scaled = x / (self.__width - x_start) * (self.__r_end - self.__r_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
566 |
return x_scaled |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
567 |
# return x, y, width, height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
568 |
def get_selection_rectangle (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
569 |
y_start = self.__top_legend.get_height () + self.__data.get_height () + self.__mid_scale.get_height () + 20 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
570 |
y_height = self.__bot_scale.get_height () + 20 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
571 |
x_start = self.__bot_scale.get_position (self.__r_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
572 |
x_end = self.__bot_scale.get_position (self.__r_end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
573 |
return (x_start,y_start,x_end-x_start,y_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
574 |
def scale_selection (self, x): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
575 |
x_scaled = x / self.__width * (self.__end - self.__start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
576 |
return x_scaled |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
577 |
def set_range (self,start, end): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
578 |
s = min (start, end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
579 |
e = max (start, end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
580 |
start = max (self.__start, s) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
581 |
end = min (self.__end, e) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
582 |
self.__r_start = start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
583 |
self.__r_end = end |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
584 |
self.__data.set_render_range (start, end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
585 |
self.__mid_scale.set_bounds (start, end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
586 |
self.layout (self.__width, self.__height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
587 |
def get_range (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
588 |
return (self.__r_start, self.__r_end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
589 |
def set_data (self, data): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
590 |
self.__data = data |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
591 |
def set_top_legend (self, top_legend): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
592 |
self.__top_legend = top_legend |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
593 |
def layout (self, width, height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
594 |
self.__width = width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
595 |
self.__height = height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
596 |
self.__top_legend.layout (width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
597 |
top_legend_height = self.__top_legend.get_height () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
598 |
self.__data.layout (width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
599 |
self.__mid_scale.layout (width - self.__data.get_data_x_start ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
600 |
self.__bot_scale.layout (width) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
601 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
602 |
def __x_pixel (self, x, width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
603 |
new_x = (x - self.__start) * width / (self.__end - self.__start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
604 |
return new_x |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
605 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
606 |
def draw (self, ctx): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
607 |
# default background is white |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
608 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
609 |
ctx.set_source_rgb (1, 1, 1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
610 |
ctx.set_operator (cairo.OPERATOR_SOURCE) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
611 |
ctx.rectangle (0,0,self.__width,self.__height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
612 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
613 |
|
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
614 |
# top legend |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
615 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
616 |
self.__top_legend.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
617 |
top_legend_height = self.__top_legend.get_height () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
618 |
ctx.restore () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
619 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
620 |
# separation line |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
621 |
ctx.move_to (0, top_legend_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
622 |
ctx.line_to (self.__width, top_legend_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
623 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
624 |
ctx.set_line_width (2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
625 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
626 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
627 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
628 |
# data |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
629 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
630 |
ctx.translate (0, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
631 |
top_legend_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
632 |
self.__data.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
633 |
ctx.restore () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
634 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
635 |
# scale below data |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
636 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
637 |
ctx.translate (self.__data.get_data_x_start (), |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
638 |
top_legend_height + self.__data.get_height () + self.__mid_scale.get_height ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
639 |
self.__mid_scale.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
640 |
ctx.restore () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
641 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
642 |
height_used = top_legend_height + self.__data.get_height () + self.__mid_scale.get_height () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
643 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
644 |
# separation between scale and left pane |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
645 |
ctx.move_to (self.__data.get_data_x_start (), height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
646 |
ctx.rel_line_to (0, -self.__mid_scale.get_height ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
647 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
648 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
649 |
ctx.set_line_width (2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
650 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
651 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
652 |
# separation below scale |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
653 |
ctx.move_to (0, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
654 |
ctx.line_to (self.__width, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
655 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
656 |
ctx.set_line_width (2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
657 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
658 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
659 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
660 |
select_start = self.__bot_scale.get_position (self.__r_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
661 |
select_end = self.__bot_scale.get_position (self.__r_end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
662 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
663 |
# left connection between top scale and bottom scale |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
664 |
ctx.move_to (0, height_used); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
665 |
ctx.line_to (self.__data.get_data_x_start (), height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
666 |
ctx.line_to (select_start, height_used + 20) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
667 |
ctx.line_to (0, height_used + 20) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
668 |
ctx.line_to (0,height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
669 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
670 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
671 |
ctx.stroke_preserve () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
672 |
ctx.set_source_rgb (0.9,0.9,0.9) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
673 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
674 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
675 |
# right connection between top scale and bottom scale |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
676 |
ctx.move_to (self.__width, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
677 |
ctx.line_to (self.__width, height_used+20) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
678 |
ctx.line_to (select_end, height_used+20) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
679 |
ctx.line_to (self.__width, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
680 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
681 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
682 |
ctx.stroke_preserve () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
683 |
ctx.set_source_rgb (0.9,0.9,0.9) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
684 |
ctx.fill () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
685 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
686 |
height_used += 20 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
687 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
688 |
# unused area background |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
689 |
unused_start = self.__bot_scale.get_position (self.__r_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
690 |
unused_end = self.__bot_scale.get_position (self.__r_end) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
691 |
unused_height = self.__bot_scale.get_height () + 20 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
692 |
ctx.rectangle (0, height_used, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
693 |
unused_start, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
694 |
unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
695 |
ctx.rectangle (unused_end, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
696 |
height_used, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
697 |
self.__width - unused_end, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
698 |
unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
699 |
ctx.set_source_rgb (0.9,0.9,0.9) |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
700 |
ctx.fill () |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
701 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
702 |
# border line around bottom scale |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
703 |
ctx.move_to (unused_end, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
704 |
ctx.line_to (self.__width, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
705 |
ctx.line_to (self.__width, height_used + unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
706 |
ctx.line_to (0, height_used + unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
707 |
ctx.line_to (0, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
708 |
ctx.line_to (unused_start, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
709 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
710 |
ctx.set_line_width (2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
711 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
712 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
713 |
ctx.move_to (unused_start, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
714 |
ctx.line_to (unused_end, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
715 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
716 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
717 |
ctx.set_source_rgb (0.9,0.9,0.9) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
718 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
719 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
720 |
# unused area dot borders |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
721 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
722 |
ctx.move_to (max (unused_start, 2), height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
723 |
ctx.rel_line_to (0,unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
724 |
ctx.move_to (min (unused_end, self.__width-2), height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
725 |
ctx.rel_line_to (0, unused_height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
726 |
ctx.set_dash ([5], 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
727 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
728 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
729 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
730 |
ctx.restore () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
731 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
732 |
# bottom scale |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
733 |
ctx.save () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
734 |
ctx.translate (0, height_used) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
735 |
self.__bot_scale.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
736 |
ctx.restore () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
737 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
738 |
class GtkGraphicRenderer (gtk.DrawingArea): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
739 |
def __init__ (self, data): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
740 |
super (GtkGraphicRenderer, self).__init__ () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
741 |
self.__data = data |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
742 |
self.__moving_left = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
743 |
self.__moving_right = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
744 |
self.__moving_both = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
745 |
self.__moving_top = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
746 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
747 |
self.add_events (gtk.gdk.POINTER_MOTION_MASK) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
748 |
self.add_events (gtk.gdk.BUTTON_PRESS_MASK) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
749 |
self.add_events (gtk.gdk.BUTTON_RELEASE_MASK) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
750 |
self.connect ("expose_event", self.expose) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
751 |
self.connect ('size-allocate', self.size_allocate) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
752 |
self.connect ('motion-notify-event', self.motion_notify) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
753 |
self.connect ('button-press-event', self.button_press) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
754 |
self.connect ('button-release-event', self.button_release) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
755 |
def set_smaller_zoom (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
756 |
(start, end) = self.__data.get_range () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
757 |
self.__data.set_range (start, start+(end-start)*2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
758 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
759 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
760 |
def set_bigger_zoom (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
761 |
(start, end) = self.__data.get_range () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
762 |
self.__data.set_range (start, start+(end-start)/2) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
763 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
764 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
765 |
def output_png (self, filename): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
766 |
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
767 |
self.__data.get_width (), |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
768 |
self.__data.get_height ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
769 |
ctx = cairo.Context (self.__buffer_surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
770 |
self.__data.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
771 |
surface.write_to_png (filename) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
772 |
def button_press (self, widget, event): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
773 |
(x, y, width, height) = self.__data.get_selection_rectangle () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
774 |
(d_x, d_y, d_width, d_height) = self.__data.get_data_rectangle () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
775 |
if event.y > y and event.y < y+height: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
776 |
if abs (event.x - x) < 5: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
777 |
self.__moving_left = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
778 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
779 |
if abs (event.x - (x+width)) < 5: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
780 |
self.__moving_right = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
781 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
782 |
if event.x > x and event.x < x+width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
783 |
self.__moving_both = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
784 |
self.__moving_both_start = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
785 |
self.__moving_both_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
786 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
787 |
if event.y > d_y and event.y < (d_y + d_height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
788 |
if event.x > d_x and event.x < (d_x + d_width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
789 |
self.__moving_top = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
790 |
self.__moving_top_start = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
791 |
self.__moving_top_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
792 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
793 |
return False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
794 |
def button_release (self, widget, event): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
795 |
if self.__moving_left: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
796 |
self.__moving_left = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
797 |
left = self.__data.scale_selection (self.__moving_left_cur) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
798 |
right = self.__data.get_range ()[1] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
799 |
self.__data.set_range (left, right) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
800 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
801 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
802 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
803 |
if self.__moving_right: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
804 |
self.__moving_right = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
805 |
right = self.__data.scale_selection (self.__moving_right_cur) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
806 |
left = self.__data.get_range ()[0] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
807 |
self.__data.set_range (left, right) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
808 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
809 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
810 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
811 |
if self.__moving_both: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
812 |
self.__moving_both = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
813 |
delta = self.__data.scale_selection (self.__moving_both_cur - self.__moving_both_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
814 |
(left, right) = self.__data.get_range () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
815 |
self.__data.set_range (left+delta, right+delta) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
816 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
817 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
818 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
819 |
if self.__moving_top: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
820 |
self.__moving_top = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
821 |
return False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
822 |
def motion_notify (self, widget, event): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
823 |
(x, y, width, height) = self.__data.get_selection_rectangle () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
824 |
if self.__moving_left: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
825 |
if event.x <= 0: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
826 |
self.__moving_left_cur = 0 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
827 |
elif event.x >= x+width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
828 |
self.__moving_left_cur = x+width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
829 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
830 |
self.__moving_left_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
831 |
self.queue_draw_area (0, int(y), int(self.__width), int(height)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
832 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
833 |
if self.__moving_right: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
834 |
if event.x >= self.__width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
835 |
self.__moving_right = self.__width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
836 |
elif event.x < x: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
837 |
self.__moving_right_cur = x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
838 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
839 |
self.__moving_right_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
840 |
self.queue_draw_area (0, int(y), int(self.__width), int(height)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
841 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
842 |
if self.__moving_both: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
843 |
cur_e = self.__width - (x + width - self.__moving_both_start) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
844 |
cur_s = (self.__moving_both_start - x) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
845 |
if event.x < cur_s: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
846 |
self.__moving_both_cur = cur_s |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
847 |
elif event.x > cur_e: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
848 |
self.__moving_both_cur = cur_e |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
849 |
else: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
850 |
self.__moving_both_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
851 |
self.queue_draw_area (0, int(y), int(self.__width), int(height)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
852 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
853 |
if self.__moving_top: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
854 |
self.__moving_top_cur = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
855 |
delta = self.__data.scale_data (self.__moving_top_start-self.__moving_top_cur) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
856 |
(left, right) = self.__data.get_range () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
857 |
self.__data.set_range (left+delta, right+delta) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
858 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
859 |
self.__moving_top_start = event.x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
860 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
861 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
862 |
(d_x, d_y, d_width, d_height) = self.__data.get_data_rectangle () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
863 |
if event.y > y and event.y < y+height: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
864 |
if abs (event.x - x) < 5 or abs (event.x - (x+width)) < 5: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
865 |
widget.window.set_cursor (gtk.gdk.Cursor (gtk.gdk.SB_H_DOUBLE_ARROW)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
866 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
867 |
if event.x > x and event.x < x+width: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
868 |
widget.window.set_cursor (gtk.gdk.Cursor (gtk.gdk.FLEUR)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
869 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
870 |
if event.y > d_y and event.y < (d_y + d_height): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
871 |
if event.x > d_x and event.x < (d_x + d_width): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
872 |
widget.window.set_cursor (gtk.gdk.Cursor (gtk.gdk.FLEUR)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
873 |
return True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
874 |
widget.window.set_cursor (None) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
875 |
return False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
876 |
def size_allocate (self, widget, allocation): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
877 |
self.__width = allocation.width |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
878 |
self.__height = allocation.height |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
879 |
self.__data.layout (allocation.width, allocation.height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
880 |
self.__force_full_redraw = True |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
881 |
self.queue_draw () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
882 |
def expose (self, widget, event): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
883 |
if self.__force_full_redraw: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
884 |
self.__buffer_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
885 |
self.__data.get_width (), |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
886 |
self.__data.get_height ()) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
887 |
ctx = cairo.Context(self.__buffer_surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
888 |
self.__data.draw (ctx) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
889 |
self.__force_full_redraw = False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
890 |
ctx = widget.window.cairo_create() |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
891 |
ctx.rectangle(event.area.x, event.area.y, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
892 |
event.area.width, event.area.height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
893 |
ctx.clip() |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
894 |
ctx.set_source_surface (self.__buffer_surface) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
895 |
ctx.paint () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
896 |
(x, y, width, height) = self.__data.get_selection_rectangle () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
897 |
if self.__moving_left: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
898 |
ctx.move_to (max (self.__moving_left_cur, 2), y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
899 |
ctx.rel_line_to (0, height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
900 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
901 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
902 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
903 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
904 |
if self.__moving_right: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
905 |
ctx.move_to (min (self.__moving_right_cur, self.__width-2), y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
906 |
ctx.rel_line_to (0, height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
907 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
908 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
909 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
910 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
911 |
if self.__moving_both: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
912 |
delta_x = self.__moving_both_cur - self.__moving_both_start |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
913 |
left_x = x + delta_x |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
914 |
ctx.move_to (x+delta_x, y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
915 |
ctx.rel_line_to (0, height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
916 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
917 |
ctx.move_to (x+width+delta_x, y) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
918 |
ctx.rel_line_to (0, height) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
919 |
ctx.close_path () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
920 |
ctx.set_source_rgb (0,0,0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
921 |
ctx.set_line_width (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
922 |
ctx.stroke () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
923 |
return False |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
924 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
925 |
class MainWindow: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
926 |
def __init__ (self): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
927 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
928 |
def run (self, graphic): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
929 |
window = gtk.Window() |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
930 |
self.__window = window |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
931 |
window.set_default_size (200, 200) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
932 |
vbox = gtk.VBox () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
933 |
window.add (vbox) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
934 |
render = GtkGraphicRenderer(graphic) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
935 |
self.__render = render |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
936 |
vbox.pack_end (render, True, True, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
937 |
hbox = gtk.HBox () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
938 |
vbox.pack_start (hbox, False, False, 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
939 |
smaller_zoom = gtk.Button ("Zoom Out") |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
940 |
smaller_zoom.connect ("clicked", self.__set_smaller_cb) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
941 |
hbox.pack_start (smaller_zoom) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
942 |
bigger_zoom = gtk.Button ("Zoom In") |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
943 |
bigger_zoom.connect ("clicked", self.__set_bigger_cb) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
944 |
hbox.pack_start (bigger_zoom) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
945 |
output_png = gtk.Button ("Output Png") |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
946 |
output_png.connect ("clicked", self.__output_png_cb) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
947 |
hbox.pack_start (output_png) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
948 |
window.connect('destroy', gtk.main_quit) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
949 |
window.show_all() |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
950 |
#gtk.bindings_activate (gtk.main_quit, 'q', 0) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
951 |
gtk.main() |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
952 |
def __set_smaller_cb (self, widget): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
953 |
self.__render.set_smaller_zoom () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
954 |
def __set_bigger_cb (self, widget): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
955 |
self.__render.set_bigger_zoom () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
956 |
def __output_png_cb (self, widget): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
957 |
dialog = gtk.FileChooserDialog ("Output Png", self.__window, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
958 |
gtk.FILE_CHOOSER_ACTION_SAVE, ("Save",1)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
959 |
self.__dialog = dialog |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
960 |
dialog.set_default_response (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
961 |
dialog.connect ("response", self.__dialog_response_cb) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
962 |
dialog.show () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
963 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
964 |
def __dialog_response_cb (self, widget, response): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
965 |
if response == 1: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
966 |
filename = self.__dialog.get_filename () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
967 |
self.__render.output_png (filename) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
968 |
widget.hide () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
969 |
return |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
970 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
971 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
972 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
973 |
def read_data(filename): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
974 |
timelines = Timelines () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
975 |
colors = Colors () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
976 |
fh = open(filename) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
977 |
m1 = re.compile ('range ([^ ]+) ([^ ]+) ([^ ]+) ([0-9]+) ([0-9]+)') |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
978 |
m2 = re.compile ('event-str ([^ ]+) ([^ ]+) ([^ ]+) ([0-9]+)') |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
979 |
m3 = re.compile ('event-int ([^ ]+) ([^ ]+) ([0-9]+) ([0-9]+)') |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
980 |
m4 = re.compile ('color ([^ ]+) #([a-fA-F0-9]{2,2})([a-fA-F0-9]{2,2})([a-fA-F0-9]{2,2})') |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
981 |
for line in fh.readlines(): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
982 |
m = m1.match (line) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
983 |
if m: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
984 |
line_name = m.group (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
985 |
timeline = timelines.get (m.group (1)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
986 |
rang = timeline.get_range (m.group (2)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
987 |
data_range = DataRange () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
988 |
data_range.value = m.group (3) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
989 |
data_range.start = int (m.group (4)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
990 |
data_range.end = int (m.group (5)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
991 |
rang.add_range (data_range) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
992 |
continue |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
993 |
m = m2.match (line) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
994 |
if m: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
995 |
line_name = m.group (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
996 |
timeline = timelines.get (m.group (1)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
997 |
ev = timeline.get_event_str (m.group (2)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
998 |
event = EventString () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
999 |
event.value = m.group (3) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1000 |
event.at = int (m.group (4)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1001 |
ev.add_event (event) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1002 |
continue |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1003 |
m = m3.match (line) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1004 |
if m: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1005 |
line_name = m.group (1) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1006 |
timeline = timelines.get (m.group (1)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1007 |
ev = timeline.get_event_int (m.group (2)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1008 |
event = EventInt () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1009 |
event.value = int (m.group (3)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1010 |
event.at = int (m.group (4)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1011 |
ev.add_event (event) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1012 |
continue |
128
b48c310f4e24
fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
124
diff
changeset
|
1013 |
|
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1014 |
m = m4.match (line) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1015 |
if m: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1016 |
r = int (m.group (2), 16) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1017 |
g = int (m.group (3), 16) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1018 |
b = int (m.group (4), 16) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1019 |
color = Color (r/255, g/255, b/255) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1020 |
colors.add (m.group (1), color) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1021 |
continue |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1022 |
timelines.sort () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1023 |
return (colors, timelines) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1024 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1025 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1026 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1027 |
def main(): |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1028 |
(colors, timelines) = read_data (sys.argv[1]) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1029 |
(lower_bound, upper_bound) = timelines.get_bounds () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1030 |
graphic = GraphicRenderer (lower_bound, upper_bound) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1031 |
top_legend = TopLegendRenderer () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1032 |
range_values = timelines.get_all_range_values () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1033 |
range_colors = [] |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1034 |
for range_value in range_values: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1035 |
range_colors.append (colors.lookup (range_value)) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1036 |
top_legend.set_legends (range_values, |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1037 |
range_colors) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1038 |
graphic.set_top_legend (top_legend) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1039 |
data = TimelinesRenderer () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1040 |
data.set_timelines (timelines, colors) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1041 |
graphic.set_data (data) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1042 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1043 |
# default range |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1044 |
range_mid = (upper_bound - lower_bound) /2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1045 |
range_width = (upper_bound - lower_bound) /10 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1046 |
range_lo = range_mid - range_width / 2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1047 |
range_hi = range_mid + range_width / 2 |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1048 |
graphic.set_range (range_lo, range_hi) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1049 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1050 |
main_window = MainWindow () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1051 |
main_window.run (graphic) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1052 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1053 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1054 |
main () |