From 56fdef699bfe56e49af37986cfe03b8ffaa8de19 Mon Sep 17 00:00:00 2001 From: Frederic Back Date: Mon, 2 Oct 2006 18:04:01 +0000 Subject: * added i18n support * menu entries to add/remove rings git-svn-id: file:///home/lennart/svn/public/fring/trunk@57 d0d2c35f-0a1e-0410-abeb-dabff30a67ee --- src/fringlib/__init__.py | 7 ++++++ src/fringlib/fringrenderer.py | 41 +++++++++++++++++++----------- src/fringlib/fringui.py | 58 +++++++++++++++++++++++++++++-------------- src/fringlib/fringutil.py | 5 ++++ src/fringlib/launch.py | 2 ++ 5 files changed, 80 insertions(+), 33 deletions(-) diff --git a/src/fringlib/__init__.py b/src/fringlib/__init__.py index d597d27..ab51cdc 100644 --- a/src/fringlib/__init__.py +++ b/src/fringlib/__init__.py @@ -1,3 +1,10 @@ + +import gettext +gettext.install('fring') +# change to test a translation +#lang = gettext.translation('fring', languages=['fr']) +#lang.install() + from fringwalker import * from fringrenderer import * from fringui import * diff --git a/src/fringlib/fringrenderer.py b/src/fringlib/fringrenderer.py index 59ea2a3..9fe889a 100644 --- a/src/fringlib/fringrenderer.py +++ b/src/fringlib/fringrenderer.py @@ -140,15 +140,27 @@ class FringRenderer: point_b = CENTERX+leg_radius*cos((start+end)*pi), CENTERY+leg_radius*sin((start+end)*pi) point_c = x,y - # draw the side link label + # draw the side link label ------------------------------------------- ctx.move_to(x+xmod,y) if hasContents: ctx.set_source_rgb(*self.LINK_LABEL_COLOR) else: ctx.set_source_rgb(*self.FILE_LABEL_COLOR) - - # todo: cut down label size if longer than WIDTH/2 - ring*ringradius - innerradius - label = entry.name - - width,height = self._draw_centered_text(ctx, label, align_x) + + # find out how large the label will be + label = unicode(entry.name) + self.linklayout.set_text( unicode(entry.name) ) + width, height = self.linklayout.get_pixel_size() + + # if label too long, truncate by one until it fits + m = self.WIDTH/2 - (self.RINGS_MAX*self.RING_RADIUS) - self.INNER_RADIUS + while width > m and m > 0: + label = label[:-1] + self.linklayout.set_text( label+"..." ) + width, height = self.linklayout.get_pixel_size() + if len(label) < 3: width = 0 # emergency escape + + # print the labet + ctx.rel_move_to(-width*(1-align_x), -height*.5) + ctx.show_layout(self.linklayout) if align_x == 0: width *= -1 #TODO change this... @@ -169,14 +181,15 @@ class FringRenderer: ctx.set_line_width(self.LEG_LINE_WIDTH) ctx.stroke() - # write disk usage on segments - if self.RING_RADIUS >= ctx.text_extents("55%")[3]: - ctx.move_to(*middle) - 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(entry.size)) - self._draw_centered_text(ctx, "%.0f%%" %percent) + # write disk usage on segments ------------------------------------------- + if ring == 0: # only draw percents on the first ring + if self.RING_RADIUS >= ctx.text_extents("55%")[3]: + ctx.move_to(*middle) + 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(entry.size)) + self._draw_centered_text(ctx, "%.0f%%" %percent) last = end i += 1 diff --git a/src/fringlib/fringui.py b/src/fringlib/fringui.py index 6cbbc9b..ea50477 100644 --- a/src/fringlib/fringui.py +++ b/src/fringlib/fringui.py @@ -3,6 +3,7 @@ import cairo import sys import os +import unicodedata from fringwalker import * from fringrenderer import FringRenderer from fringutil import * @@ -29,6 +30,9 @@ ui = """ + + + @@ -40,7 +44,6 @@ ui = """ """ - class UI( gtk.Window ): def __init__(self, uri): @@ -52,6 +55,7 @@ class UI( gtk.Window ): self.walker = FringWalker(); self.scan_active = False self.cursor = None + self.maxrings = 3 self.folder_memory = {} # remember some folders @@ -74,19 +78,24 @@ class UI( gtk.Window ): self.add_accel_group(accelgroup) ag_global = gtk.ActionGroup('ag_global') ag_global.add_actions([ - ('FRing', None, "_Folder"), - ('View', None, "_View"), - ('Help', None, "_Help"), - ('OpenParent', gtk.STOCK_GO_UP, "Open _Parent", "Up", "Open the parent folder", self.open_parent), - ('SelectFolder', gtk.STOCK_OPEN, "_Open Folder...", None, "Open Folder...", self.dialog_openfolder), - ('Quit', gtk.STOCK_QUIT, "_Quit", None, "Quit", self.close), - ('Zoom In', gtk.STOCK_ZOOM_IN, "Zoom _In", "Up", "Zoom In", lambda w: self.zoom(w,0.2)), - ('Zoom Out', gtk.STOCK_ZOOM_OUT, "Zoom _Out", "Down", "Zoom Out", lambda w: self.zoom(w,-0.2)), - ('Save Image...', gtk.STOCK_SAVE_AS, "_Save Image...", None, "Save Image...", self.save_image), - ('Refresh', gtk.STOCK_REFRESH, "_Refresh Tree", "R", "Refresh Tree", self.refresh_tree), - ('About', gtk.STOCK_ABOUT, "_About", None, "About", self.dialog_about), + ('FRing', None, _("_Folder")), + ('View', None, _("_View")), + ('Help', None, _("_Help")), + ('OpenParent', gtk.STOCK_GO_UP, _("Open _Parent"), "Up", _("Open the parent folder"), self.open_parent), + ('SelectFolder', gtk.STOCK_OPEN, _("_Open Folder..."), None, _("Open Folder..."), self.dialog_openfolder), + ('Quit', gtk.STOCK_QUIT, _("_Quit"), None, _("Quit"), self.close), + + ('Zoom In', gtk.STOCK_ZOOM_IN, _("Zoom _In"), "Up", _("Zoom In"), lambda w: self.zoom(w,0.2)), + ('Zoom Out', gtk.STOCK_ZOOM_OUT, _("Zoom _Out"), "Down", _("Zoom Out"), lambda w: self.zoom(w,-0.2)), + + ('AddRing', gtk.STOCK_ADD, _("_Add Ring"), "plus", _("Add Ring"), lambda w: self.zoom_rings(1)), + ('RemRing', gtk.STOCK_REMOVE, _("_Remove Ring"), "minus", _("Remove Ring"), lambda w: self.zoom_rings(-1)), + + ('Save Image...', gtk.STOCK_SAVE_AS, _("_Save Image..."), None, _("Save Image..."), self.save_image), + ('Refresh', gtk.STOCK_REFRESH, _("_Refresh Tree"), "R", _("Refresh Tree"), self.refresh_tree), + ('About', gtk.STOCK_ABOUT, _("_About"), None, "About", self.dialog_about), ]) - action = gtk.ToggleAction("Show Hidden Files", "Show Hidden Files", None, None) + action = gtk.ToggleAction("Show Hidden Files", _("Show Hidden Files"), None, None) action.set_active(True) action.connect("toggled",self.__event_togglehidden) ag_global.add_action(action) @@ -130,7 +139,7 @@ class UI( gtk.Window ): self.label = gtk.Label() self.label.set_alignment(0, .5) self.label.set_padding(6, 0) - self.label.set_text("Initializing") + self.label.set_text("") # aligh menubar, toolbar and canvas vertically vbox = gtk.VBox(); @@ -156,7 +165,10 @@ class UI( gtk.Window ): d = gtk.AboutDialog() d.set_name("fring"); d.set_license(LICENSE); - d.set_copyright("copyright 2006 Lennart Poettering, Frederic Back") + c = unicodedata.lookup('COPYRIGHT SIGN') + e = unicodedata.lookup('LATIN SMALL LETTER E WITH ACUTE') + d.set_copyright(u"Copyright "+c+" 2006 Lennart Poettering, Fr"+e+"d"+e+"ric Back") + d.set_comments(_("Visual disk usage analyser")) d.run() d.destroy() @@ -187,6 +199,15 @@ class UI( gtk.Window ): self.zoomfactor = 0 self.redraw() + def zoom_rings(self,mod): + r = self.maxrings + r += mod + if r < 2: r = 2 + if r != self.maxrings: + self.maxrings = r + #print "rings",self.maxrings + self.redraw() + def redraw(self,widget=None): # clear the canvas self.__show_busy_cursor(1) @@ -201,7 +222,7 @@ class UI( gtk.Window ): self.renderer.INNER_RADIUS = self.height/12 self.renderer.RING_RADIUS = self.height/10 self.renderer.RING_RADIUS *= self.zoomfactor - self.renderer.RINGS_MAX = 3 + self.renderer.RINGS_MAX = self.maxrings self.renderer.draw_segment(self.ctx, 0, 0, 1, 0, 1, self.data, self.uri) self.image.queue_draw() self.__show_busy_cursor(-1) @@ -237,7 +258,6 @@ class UI( gtk.Window ): self.data = self.folder_memory[uri] self.uri = uri self.redraw() - else: self.uri = uri self.walker.stop() @@ -286,7 +306,7 @@ class UI( gtk.Window ): self.label.set_text("") if f: - markup = "%s, %s, %0.1f%%" % (f.path, pretty_size(f.sumlist.size), f.value*100) + markup = "%s, %s, %0.1f%%" % (format_uri(f.path), pretty_size(f.sumlist.size), f.value*100) self.label.set_text(markup) if f.sumlist.children is not None: @@ -333,7 +353,7 @@ class UI( gtk.Window ): self.redraw() def __event_parentbutton_enter(self,widget,event): - markup = "%s" %get_parent_from_uri(self.uri) + markup = "%s" %format_uri(get_parent_from_uri(self.uri)) self.label.set_text(markup) def __event_parentbutton_leave(self,widget,event): diff --git a/src/fringlib/fringutil.py b/src/fringlib/fringutil.py index 3199bf5..b5b98df 100644 --- a/src/fringlib/fringutil.py +++ b/src/fringlib/fringutil.py @@ -1,4 +1,6 @@ import os +import gtk +import gnomevfs def get_parent_from_uri(uri): """ Get the parent folder from an uri """ @@ -6,6 +8,9 @@ def get_parent_from_uri(uri): p = os.path.join(p[:-1]) return p[0] +def format_uri(uri): + return gnomevfs.format_uri_for_display(uri) + def pretty_size(size): if size >= 1024*1024*1024: return "%.1f GiB" % round(size/1024/1024/1024.0) diff --git a/src/fringlib/launch.py b/src/fringlib/launch.py index f420768..2f752af 100755 --- a/src/fringlib/launch.py +++ b/src/fringlib/launch.py @@ -24,6 +24,8 @@ import gtk import fringui import gnomevfs +from __init__ import * + if __name__ == "__main__": if len(sys.argv) >= 2: -- cgit