diff options
Diffstat (limited to 'src/fringlib/fringrenderer.py')
-rw-r--r-- | src/fringlib/fringrenderer.py | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/src/fringlib/fringrenderer.py b/src/fringlib/fringrenderer.py index c5fd5ee..59ea2a3 100644 --- a/src/fringlib/fringrenderer.py +++ b/src/fringlib/fringrenderer.py @@ -6,26 +6,29 @@ import os class Hotspot: - def __init__(self, is_dir, path, size, value): + def __init__(self, is_dir, path, sumlist, value): self.is_dir = is_dir self.path = path - self.size = size + self.sumlist = sumlist self.value = value self.percentage = value*100 + class SideLink(Hotspot): - def __init__(self, is_dir, path, size, value, minpos, maxpos): - Hotspot.__init__(self, is_dir, path, size, value) + def __init__(self, is_dir, path, sumlist, value, minpos, maxpos): + Hotspot.__init__(self, is_dir, path, sumlist, value) self.minx,self.miny = minpos self.maxx,self.maxy = maxpos + class Segment(Hotspot): - def __init__(self, is_dir, path, size, start, end): - Hotspot.__init__(self, is_dir, path, size, end-start) + def __init__(self, is_dir, path, sumlist, start, end): + Hotspot.__init__(self, is_dir, path, sumlist, end-start) self.start, self.end = start, end + class FringRenderer: @@ -59,13 +62,8 @@ class FringRenderer: self.linklayout.set_font_description(pango.FontDescription("sans 8")) def draw_segment(self,ctx, ring, start_angle, end_angle, start_hue, end_hue, data, previouspath=""): - if data is None: return - dataname = data[0] - datacontents = data[1] - datasize = data[2] - if ring == 0: self.lookup_data = [] self.side_links = [] @@ -76,27 +74,26 @@ class FringRenderer: CENTERX, CENTERY = self.WIDTH/2, self.HEIGHT/2 ctx.move_to(CENTERX, CENTERY) - n = len(datacontents) + n = len(data.children) i = 0 accumulated = 0 last = start_angle - for entry in datacontents: - fn, contents, value = entry + for entry in data.children: - hasContents = contents != None + hasContents = entry.children != None start = last - accumulated += value + accumulated += entry.size - if datasize == 0: continue - end = start_angle+(end_angle - start_angle)*1.0*accumulated/datasize + if data.size == 0: continue + end = start_angle+(end_angle - start_angle)*1.0*accumulated/data.size if end-start >= .005: - p = previouspath+os.sep+fn - self.lookup_data[ring].append( Segment(hasContents , p, value, start, end) ) + p = previouspath+os.sep+entry.name + self.lookup_data[ring].append( Segment(hasContents , p, entry, start, end) ) color = self._choose_color(start_hue + (end_hue-start_hue)*1.0*i/n, ring) @@ -117,7 +114,7 @@ class FringRenderer: self.draw_segment(ctx, ring+1, start, end, start_hue + (end_hue-start_hue)*1.0*i/n, start_hue + (end_hue-start_hue)*1.0*(i+1)/n, entry, - previouspath+os.sep+fn) + previouspath+os.sep+entry.name) r += self.RING_RADIUS/2 middle = CENTERX+r*cos((start+end)*pi), CENTERY+r*sin((start+end)*pi) @@ -149,12 +146,18 @@ class FringRenderer: else: ctx.set_source_rgb(*self.FILE_LABEL_COLOR) # todo: cut down label size if longer than WIDTH/2 - ring*ringradius - innerradius - label = fn + label = entry.name width,height = self._draw_centered_text(ctx, label, align_x) if align_x == 0: width *= -1 #TODO change this... - self.__register_side_link(hasContents,p,value,end-start,x,y+(height/2),x+(width),y-(height/2)) + + self.__register_side_link( + hasContents, + p, + entry, + end-start, + x,y+(height/2),x+(width),y-(height/2)) # draw line ctx.move_to(*point_a) @@ -172,7 +175,7 @@ class FringRenderer: ctx.set_source_rgb(0, 0, 0) percent = (end-start)*100 if percent >= 8: - #self._draw_centered_text2(ctx, "%.0f%%" % ((end-start)*100), pretty_size(value)) + #self._draw_centered_text2(ctx, "%.0f%%" % ((end-start)*100), pretty_size(entry.size)) self._draw_centered_text(ctx, "%.0f%%" %percent) last = end @@ -180,7 +183,7 @@ class FringRenderer: if ring == 0: ctx.set_source_rgb(.3,.3,.3) - i = format_disk_space(datasize) + i = format_disk_space(data.size) ctx.move_to(CENTERX, CENTERY) width,height = self._draw_centered_text(ctx, i[0], .5, 1 ) ctx.move_to(CENTERX, CENTERY+height) @@ -239,10 +242,10 @@ class FringRenderer: p = np # Funny! - def __register_side_link(self,is_dir,path,size,value,x0,y0,x1,y1): + def __register_side_link(self,is_dir,path,sumlist,value,x0,y0,x1,y1): if x1 < x0: x0,x1 = x1,x0 # swap if y1 < y0: y0,y1 = y1,y0 - self.side_links.append(SideLink(is_dir, path, size, value, (x0,y0), (x1,y1))) + self.side_links.append(SideLink(is_dir, path, sumlist, value, (x0,y0), (x1,y1))) def hsv2rgb(self,h,s,v): if s<=0: |