gget r19 - trunk/gget



Author: johans
Date: Fri Jun 27 14:26:08 2008
New Revision: 19
URL: http://svn.gnome.org/viewvc/gget?rev=19&view=rev

Log:
Added a column in the download treeview showing the icon for the mime type for the file being downloaded. Also made it so that the associated program starts on row activation.

Modified:
   trunk/gget/Download.py
   trunk/gget/GUI.py
   trunk/gget/MainWindow.py

Modified: trunk/gget/Download.py
==============================================================================
--- trunk/gget/Download.py	(original)
+++ trunk/gget/Download.py	Fri Jun 27 14:26:08 2008
@@ -46,6 +46,7 @@
         self.path = path
 
         self.file_name = os.path.basename(self.url)
+        self.file = os.path.join(path, self.file_name)
 
         self.size = 0
         self.block_count = 0

Modified: trunk/gget/GUI.py
==============================================================================
--- trunk/gget/GUI.py	(original)
+++ trunk/gget/GUI.py	Fri Jun 27 14:26:08 2008
@@ -63,6 +63,17 @@
 
     return pixbuf
 
+def load_icon_from_mime_type(mime_type, size=48):
+    """Loads an icon from a mime type string. This is ugly and error prone,
+    there must be a better way to do this."""
+    l = mime_type.split("/")
+    mime = "%s-%s" % (l[0], l[1])
+    pixbuf = icon_theme.load_icon(mime, size, gtk.ICON_LOOKUP_USE_BUILTIN)
+    if not pixbuf:
+        mime = "gnome-mime-%s" % mime
+        pixbuf = icon_theme.load_icon(mime, size, gtk.ICON_LOOKUP_USE_BUILTIN)
+    return pixbuf
+
 def queue_resize(treeview):
     columns = treeview.get_columns()
     for column in columns:

Modified: trunk/gget/MainWindow.py
==============================================================================
--- trunk/gget/MainWindow.py	(original)
+++ trunk/gget/MainWindow.py	Fri Jun 27 14:26:08 2008
@@ -25,6 +25,8 @@
 import gtk
 import gobject
 import gconf
+import gnomevfs
+import gnome.ui
 
 import Configuration
 import GUI
@@ -109,17 +111,25 @@
         self.downloads_model = gtk.ListStore(object)
         self.downloads_treeview.set_model(self.downloads_model)
 
-        # Name
+        # Name column
+        image_cell_renderer = gtk.CellRendererPixbuf()
+        image_cell_renderer.props.xpad = 3
+        image_cell_renderer.props.ypad = 3
+
         name_cell_renderer = gtk.CellRendererText()
         name_cell_renderer.props.xpad = 3
         name_cell_renderer.props.ypad = 3
-        name_treeview_column = gtk.TreeViewColumn(_("Name"),
-                name_cell_renderer)
+
+        name_treeview_column = gtk.TreeViewColumn(_("Name"))
+        name_treeview_column.pack_start(image_cell_renderer)
+        name_treeview_column.set_cell_data_func(image_cell_renderer,
+                self.__image_cell_data_func)
+        name_treeview_column.pack_start(name_cell_renderer)
         name_treeview_column.set_cell_data_func(name_cell_renderer,
                 self.__name_cell_data_func)
         self.downloads_treeview.append_column(name_treeview_column)
 
-        # Status
+        # Status column
         status_cell_renderer = gtk.CellRendererText()
         status_cell_renderer.props.xpad = 3
         status_cell_renderer.props.ypad = 3
@@ -129,7 +139,7 @@
                 self.__status_cell_data_func)
         self.downloads_treeview.append_column(status_treeview_column)
 
-        # Size
+        # Size column
         size_cell_renderer = gtk.CellRendererText()
         size_cell_renderer.props.xpad = 3
         size_cell_renderer.props.ypad = 3
@@ -139,7 +149,7 @@
                 self.__size_cell_data_func)
         self.downloads_treeview.append_column(size_treeview_column)
 
-        # Progress
+        # Progress column
         progress_cell_renderer = gtk.CellRendererProgress()
         progress_cell_renderer.props.xpad = 3
         progress_cell_renderer.props.ypad = 3
@@ -149,7 +159,7 @@
                 self.__progress_cell_data_func)
         self.downloads_treeview.append_column(progress_treeview_column)
 
-        # Speed
+        # Speed column
         speed_cell_renderer = gtk.CellRendererText()
         speed_cell_renderer.props.xpad = 3
         speed_cell_renderer.props.ypad = 3
@@ -159,7 +169,7 @@
                 self.__speed_cell_data_func)
         self.downloads_treeview.append_column(speed_treeview_column)
 
-        # ETA
+        # ETA column
         eta_cell_renderer = gtk.CellRendererText()
         eta_cell_renderer.props.xpad = 3
         eta_cell_renderer.props.ypad = 3
@@ -184,6 +194,13 @@
         self.cancel_imi.show()
         self.downloads_treeview_menu.append(self.cancel_imi)
 
+    def __image_cell_data_func(self, column, cell, model, iter):
+        """Data function for the image of the download."""
+        download = model.get_value(iter, 0)
+        mime_type = gnomevfs.get_file_mime_type(download.file_name)
+        cell.props.pixbuf = GUI.load_icon_from_mime_type(mime_type,
+                32)
+
     def __name_cell_data_func(self, column, cell, model, iter):
         """Data function for the name of downloads."""
         download = model.get_value(iter, 0)
@@ -250,6 +267,8 @@
         selection = self.downloads_treeview.get_selection()
         selection.connect("changed",
                 self.__downloads_treeview_selection_changed)
+        self.downloads_treeview.connect("row-activated",
+                self.__downloads_treeview_row_activated)
         self.downloads_treeview.connect("button-press-event",
                 self.__downloads_treeview_button_press,
                 self.downloads_treeview_menu)
@@ -334,6 +353,11 @@
             self.cancel_tool_button.set_sensitive(False)
             self.cancel_imi.set_sensitive(False)
 
+    def __downloads_treeview_row_activated(self, treeview, path, column):
+        download = self.downloads_model[path][0]
+        uri = gnomevfs.make_uri_from_input_with_dirs(download.file, 2)
+        gnome.ui.url_show_on_screen(uri, treeview.get_screen())
+
     def __downloads_treeview_button_press(self, treeview, event, menu):
         """Show context menu for downloads treeview"""
         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]