summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Back <fredericback@gmail.com>2006-10-02 18:04:01 +0000
committerFrederic Back <fredericback@gmail.com>2006-10-02 18:04:01 +0000
commit56fdef699bfe56e49af37986cfe03b8ffaa8de19 (patch)
tree67c7206828fce6ae881fe06ecc7c1fa9a832f6de
parent14a7816a1df56b28d923f11981c9a1fc5a0134ce (diff)
* 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
-rw-r--r--src/fringlib/__init__.py7
-rw-r--r--src/fringlib/fringrenderer.py41
-rw-r--r--src/fringlib/fringui.py58
-rw-r--r--src/fringlib/fringutil.py5
-rwxr-xr-xsrc/fringlib/launch.py2
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 = """
<separator />
<menuitem action="Zoom In"/>
<menuitem action="Zoom Out"/>
+ <separator />
+ <menuitem action="AddRing"/>
+ <menuitem action="RemRing"/>
</menu>
<menu action="Help">
<menuitem action="About"/>
@@ -40,7 +44,6 @@ ui = """
</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", "<alt>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", "<ctrl>Up", "Zoom In", lambda w: self.zoom(w,0.2)),
- ('Zoom Out', gtk.STOCK_ZOOM_OUT, "Zoom _Out", "<ctrl>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", "<ctrl>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"), "<alt>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"), "<ctrl>Up", _("Zoom In"), lambda w: self.zoom(w,0.2)),
+ ('Zoom Out', gtk.STOCK_ZOOM_OUT, _("Zoom _Out"), "<ctrl>Down", _("Zoom Out"), lambda w: self.zoom(w,-0.2)),
+
+ ('AddRing', gtk.STOCK_ADD, _("_Add Ring"), "<ctrl>plus", _("Add Ring"), lambda w: self.zoom_rings(1)),
+ ('RemRing', gtk.STOCK_REMOVE, _("_Remove Ring"), "<ctrl>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"), "<ctrl>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: