Add status icons to torrentview.
This commit is contained in:
parent
a9961adda7
commit
4ca7ced757
|
@ -89,6 +89,7 @@ def get_pixmap(fname):
|
|||
"""Returns a pixmap file included with deluge"""
|
||||
return pkg_resources.resource_filename("deluge", os.path.join("data", \
|
||||
"pixmaps", fname))
|
||||
|
||||
def get_logo(size):
|
||||
"""Returns a deluge logo pixbuf based on the size parameter."""
|
||||
import gtk
|
||||
|
|
|
@ -40,7 +40,6 @@ import deluge.common
|
|||
from deluge.log import LOG as log
|
||||
|
||||
# Cell data functions to pass to add_func_column()
|
||||
|
||||
def cell_data_speed(column, cell, model, row, data):
|
||||
"""Display value as a speed, eg. 2 KiB/s"""
|
||||
speed = int(model.get_value(row, data))
|
||||
|
@ -244,8 +243,9 @@ class ListView:
|
|||
|
||||
return
|
||||
|
||||
def add_column(self, header, renderer, col_types, hidden, position,
|
||||
status_field, sortid, text=0, value=0, function=None):
|
||||
def add_column(self, header, render, col_types, hidden, position,
|
||||
status_field, sortid, text=0, value=0, pixbuf=0, function=None,
|
||||
column_type=None):
|
||||
"""Adds a column to the ListView"""
|
||||
# Add the column types to liststore_columns
|
||||
column_indices = []
|
||||
|
@ -272,43 +272,37 @@ class ListView:
|
|||
# Create a new list with the added column
|
||||
self.create_new_liststore()
|
||||
|
||||
if type(renderer) is not tuple and type(renderer) is not list:
|
||||
renderer = [renderer]
|
||||
|
||||
column = gtk.TreeViewColumn(header)
|
||||
for render in renderer:
|
||||
if type(render) is gtk.CellRendererText:
|
||||
# Check to see if this is a function column or not
|
||||
if function is None:
|
||||
# Not a function column, so lets treat it as a regular
|
||||
# text col
|
||||
column.pack_start(render)
|
||||
column.add_attribute(render, "text",
|
||||
self.columns[header].column_indices[text])
|
||||
else:
|
||||
# This is a function column
|
||||
column.pack_start(render, True)
|
||||
if len(self.columns[header].column_indices) > 1:
|
||||
column.set_cell_data_func(render, function,
|
||||
tuple(self.columns[header].column_indices))
|
||||
else:
|
||||
column.set_cell_data_func(render, function,
|
||||
self.columns[header].column_indices[0])
|
||||
elif type(render) is gtk.CellRendererProgress:
|
||||
# This is a progress column
|
||||
column.pack_start(render)
|
||||
column.add_attribute(render, "text",
|
||||
column = gtk.TreeViewColumn(header)
|
||||
if column_type == "text":
|
||||
column.pack_start(render)
|
||||
column.add_attribute(render, "text",
|
||||
self.columns[header].column_indices[text])
|
||||
column.add_attribute(render, "value",
|
||||
self.columns[header].column_indices[value])
|
||||
|
||||
elif type(render) is gtk.CellRendererPixbuf:
|
||||
# This is a pixbuf column
|
||||
column.pack_start(render, expand=False)
|
||||
column.add_attribute(render, "pixbuf",
|
||||
self.columns[header].column_indices[pixbuf])
|
||||
elif column_type == "func":
|
||||
column.pack_start(render, True)
|
||||
if len(self.columns[header].column_indices) > 1:
|
||||
column.set_cell_data_func(render, function,
|
||||
tuple(self.columns[header].column_indices))
|
||||
else:
|
||||
column.pack_start(render)
|
||||
column.set_cell_data_func(render, function,
|
||||
self.columns[header].column_indices[0])
|
||||
elif column_type == "progress":
|
||||
column.pack_start(render)
|
||||
column.add_attribute(render, "text",
|
||||
self.columns[header].column_indices[text])
|
||||
column.add_attribute(render, "value",
|
||||
self.columns[header].column_indices[value])
|
||||
elif column_type == "texticon":
|
||||
column.pack_start(render[pixbuf])
|
||||
if function is not None:
|
||||
column.set_cell_data_func(render[pixbuf], function,
|
||||
self.columns[header].column_indices[pixbuf])
|
||||
column.pack_start(render[text])
|
||||
column.add_attribute(render[text], "text",
|
||||
self.columns[header].column_indices[text])
|
||||
elif column_type == None:
|
||||
return
|
||||
|
||||
|
||||
|
||||
column.set_sort_column_id(self.columns[header].column_indices[sortid])
|
||||
column.set_clickable(True)
|
||||
|
@ -332,23 +326,26 @@ class ListView:
|
|||
def add_text_column(self, header, col_type=str, hidden=False,
|
||||
position=None,
|
||||
status_field=None,
|
||||
sortid=0):
|
||||
sortid=0,
|
||||
column_type="text"):
|
||||
"""Add a text column to the listview. Only the header name is required.
|
||||
"""
|
||||
render = gtk.CellRendererText()
|
||||
self.add_column(header, render, col_type, hidden, position,
|
||||
status_field, sortid, text=0)
|
||||
status_field, sortid, column_type=column_type)
|
||||
|
||||
return True
|
||||
|
||||
def add_func_column(self, header, function, col_types, sortid=0,
|
||||
hidden=False, position=None, status_field=None):
|
||||
hidden=False, position=None, status_field=None,
|
||||
column_type="func"):
|
||||
"""Add a function column to the listview. Need a header name, the
|
||||
function and the column types."""
|
||||
|
||||
render = gtk.CellRendererText()
|
||||
self.add_column(header, render, col_types, hidden, position,
|
||||
status_field, sortid, function=function)
|
||||
status_field, sortid, column_type=column_type,
|
||||
function=function)
|
||||
|
||||
return True
|
||||
|
||||
|
@ -356,25 +353,31 @@ class ListView:
|
|||
sortid=0,
|
||||
hidden=False,
|
||||
position=None,
|
||||
status_field=None):
|
||||
status_field=None,
|
||||
column_type="progress"):
|
||||
"""Add a progress column to the listview."""
|
||||
|
||||
render = gtk.CellRendererProgress()
|
||||
self.add_column(header, render, col_types, hidden, position,
|
||||
status_field, sortid, value=0, text=1)
|
||||
status_field, sortid, column_type=column_type,
|
||||
value=0, text=1)
|
||||
|
||||
return True
|
||||
|
||||
def add_texticon_column(self, header, col_types=[gtk.gdk.Pixbuf, str],
|
||||
def add_texticon_column(self, header, col_types=[int, str],
|
||||
sortid=0,
|
||||
hidden=False,
|
||||
position=None,
|
||||
status_field=None):
|
||||
status_field=None,
|
||||
column_type="texticon",
|
||||
function=None):
|
||||
"""Adds a texticon column to the listview."""
|
||||
render1 = gtk.CellRendererPixbuf()
|
||||
render2 = gtk.CellRendererText()
|
||||
|
||||
self.add_column(header, (render1, render2), col_types, hidden,
|
||||
position, status_field, sortid, text=1, pixbuf=0)
|
||||
position, status_field, sortid,
|
||||
column_type=column_type, function=function,
|
||||
pixbuf=0, text=1)
|
||||
|
||||
return True
|
||||
|
|
|
@ -38,10 +38,34 @@ pygtk.require('2.0')
|
|||
import gtk, gtk.glade
|
||||
import gettext
|
||||
|
||||
import deluge.common
|
||||
import deluge.ui.functions as functions
|
||||
from deluge.log import LOG as log
|
||||
import deluge.ui.gtkui.listview as listview
|
||||
|
||||
def cell_data_statusicon(column, cell, model, row, data):
|
||||
"""Display text with an icon"""
|
||||
state = model.get_value(row, data)
|
||||
if state == deluge.common.TORRENT_STATE.index("Connecting"):
|
||||
fname = "downloading16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Downloading"):
|
||||
fname = "downloading16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Downloading Metadata"):
|
||||
fname = "downloading16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Queued"):
|
||||
fname = "inactive16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Checking"):
|
||||
fname = "downloading16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Allocating"):
|
||||
fname = "downloading16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Finished"):
|
||||
fname = "seeding16.png"
|
||||
if state == deluge.common.TORRENT_STATE.index("Seeding"):
|
||||
fname = "seeding16.png"
|
||||
|
||||
icon = gtk.gdk.pixbuf_new_from_file(deluge.common.get_pixmap(fname))
|
||||
cell.set_property("pixbuf", icon)
|
||||
|
||||
class TorrentView(listview.ListView):
|
||||
"""TorrentView handles the listing of torrents."""
|
||||
def __init__(self, window):
|
||||
|
@ -59,7 +83,8 @@ class TorrentView(listview.ListView):
|
|||
|
||||
# Add the columns to the listview
|
||||
self.add_text_column("torrent_id", hidden=True)
|
||||
self.add_text_column("Name", status_field=["name"])
|
||||
self.add_texticon_column("Name", status_field=["state", "name"],
|
||||
function=cell_data_statusicon)
|
||||
self.add_func_column("Size",
|
||||
listview.cell_data_size,
|
||||
[long],
|
||||
|
@ -143,6 +168,9 @@ class TorrentView(listview.ListView):
|
|||
status_keys.append(field)
|
||||
columns_to_update.append(column)
|
||||
|
||||
# Remove duplicate keys
|
||||
columns_to_update = list(set(columns_to_update))
|
||||
|
||||
# If there is nothing in status_keys then we must not continue
|
||||
if status_keys is []:
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue