From bb9e31d23a3466d5faded83bf3b7a03f12aca094 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Thu, 25 Aug 2005 20:02:36 +0000 Subject: [PATCH] Better text formatting for interface details window. Added tooltips to implementations list. Cope better with implementations with no download sources. git-svn-id: file:///home/talex/Backups/sf.net/Subversion/zero-install/injector/injector-gui@491 9f8c893c-44ee-0310-b757-c8ca8341c71e --- gui.py | 4 +++- iface_browser.py | 7 ++++++- impl_list.py | 33 +++++++++++++++++++++++++++++++++ properties.py | 8 +++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/gui.py b/gui.py index 602b11e..83e3c14 100644 --- a/gui.py +++ b/gui.py @@ -139,7 +139,9 @@ class GUIPolicy(Policy): def get_best_source(self, impl): """Return the best download source for this implementation.""" - return impl.download_sources[0] + if impl.download_sources: + return impl.download_sources[0] + return None # XXX: Remove this. Moved to Policy. def refresh_all(self, force = True): diff --git a/iface_browser.py b/iface_browser.py index 17da6c1..b8cd8d9 100644 --- a/iface_browser.py +++ b/iface_browser.py @@ -43,6 +43,8 @@ class InterfaceTips(TreeTips): return _("This version is already stored on your computer.") else: src = policy.get_best_source(impl) + if not src: + return _("No downloads available!") return _("Need to download %s (%s bytes)") % \ (pretty_size(src.size), src.size) @@ -161,7 +163,10 @@ class InterfaceBrowser(gtk.ScrolledWindow): fetch = '(cached)' else: src = policy.get_best_source(impl) - fetch = pretty_size(src.size) + if src: + fetch = pretty_size(src.size) + else: + fetch = '(unavailable)' self.model[iter][InterfaceBrowser.DOWNLOAD_SIZE] = fetch for child in impl.dependencies.values(): add_node(iter, policy.get_interface(child.interface)) diff --git a/impl_list.py b/impl_list.py index eb54301..79e3f81 100644 --- a/impl_list.py +++ b/impl_list.py @@ -1,6 +1,7 @@ import gtk, gobject, os from zeroinstall.injector import model, writer from gui import policy, pretty_size +from treetips import TreeTips def popup_menu(bev, values, fn): menu = gtk.Menu() @@ -25,6 +26,24 @@ CACHED = 4 UNUSABLE = 5 RELEASED = 6 +class ImplTips(TreeTips): + def get_tooltip_text(self, item): + interface, id = item + if id.startswith('/'): + return _("Local: %s") % id + impl = interface.implementations[id] + if policy.get_cached(impl): + return _("Cached: %s") % policy.get_implementation_path(impl) + + src = policy.get_best_source(impl) + if src: + size = pretty_size(src.size) + return _("Not yet downloaded (%s)") % size + else: + return _("No downloads available!") + +tips = ImplTips() + class ImplementationList(gtk.ScrolledWindow): tree_view = None model = None @@ -54,6 +73,20 @@ class ImplementationList(gtk.ScrolledWindow): self.add(self.tree_view) + def motion(tree_view, ev): + if ev.window is not tree_view.get_bin_window(): + return False + pos = tree_view.get_path_at_pos(int(ev.x), int(ev.y)) + if pos: + path = pos[0] + row = self.model[path] + tips.prime(tree_view, (interface, row[ITEM].id)) + else: + tips.hide() + + self.tree_view.connect('motion-notify-event', motion) + self.tree_view.connect('leave-notify-event', lambda tv, ev: tips.hide()) + def button_press(tree_view, bev): if bev.button not in (1, 3): return False diff --git a/properties.py b/properties.py index 2a76c37..83e51cb 100644 --- a/properties.py +++ b/properties.py @@ -16,6 +16,10 @@ def enumerate(items): yield x, i x += 1 +def format_para(para): + lines = [l.strip() for l in para.split('\n')] + return ' '.join(lines) + class Description(gtk.ScrolledWindow): def __init__(self): gtk.ScrolledWindow.__init__(self, None, None) @@ -59,7 +63,9 @@ class Description(gtk.ScrolledWindow): buffer.insert_with_tags(iter, '\n\nDescription\n', heading_style) - buffer.insert(iter, interface.description or "-") + paragraphs = [format_para(p) for p in (interface.description or "-").split('\n\n')] + + buffer.insert(iter, '\n\n'.join(paragraphs)) class Properties(Dialog): -- 2.11.4.GIT