[GTKUI] Use less verbose units to improve look and gain physical space
* Use markup in gtkui to reduce font size of displayed units. * Reduced statusbar item sizes using markup and <small> tag. Provides an interim solution to #1326 and has reduced width from 930px to ~600px. * Integer value for Progress bar value in Peers and Files Tabs. * Remove trailing zeros for Pieces size in Details Tab. * Change position of Share Ratio in Status Tab. * Increase minimum width of column from 10px to 20px for listview. * Use shortform units e.g. Columns, Title speed, Status tab, Status bar. * Use less precision displaying values in columns.
This commit is contained in:
parent
258ad95b7a
commit
a5bc73f0b3
|
@ -17,8 +17,8 @@ from deluge.ui.gtkui.torrentdetails import Tab
|
|||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def fpeer_size_second(first, second):
|
||||
return "%s (%s)" % (first, fsize(second))
|
||||
def fpieces_num_size(num_pieces, piece_size):
|
||||
return "%s (%s)" % (num_pieces, fsize(piece_size, precision=0))
|
||||
|
||||
|
||||
def fdate_or_dash(value):
|
||||
|
@ -57,7 +57,7 @@ class DetailsTab(Tab):
|
|||
(builder.get_object("summary_comments"), str, ("comment",)),
|
||||
(builder.get_object("summary_owner"), str, ("owner",)),
|
||||
(builder.get_object("summary_shared"), str_yes_no, ("shared",)),
|
||||
(builder.get_object("summary_pieces"), fpeer_size_second, ("num_pieces", "piece_length")),
|
||||
(builder.get_object("summary_pieces"), fpieces_num_size, ("num_pieces", "piece_length")),
|
||||
]
|
||||
|
||||
self.status_keys = [status for widget in self.label_widgets for status in widget[2]]
|
||||
|
|
|
@ -433,7 +433,7 @@ class FilesTab(Tab):
|
|||
# Catch the unusal error found when moving folders around
|
||||
value = 0
|
||||
self.treestore[parent][3] = value
|
||||
self.treestore[parent][2] = "%.2f%%" % value
|
||||
self.treestore[parent][2] = "%i%%" % value
|
||||
return completed_bytes
|
||||
|
||||
get_completed_bytes(self.treestore.iter_children(root))
|
||||
|
@ -464,7 +464,7 @@ class FilesTab(Tab):
|
|||
continue
|
||||
|
||||
try:
|
||||
progress_string = "%.2f%%" % (status["file_progress"][index] * 100)
|
||||
progress_string = "%i%%" % (status["file_progress"][index] * 100)
|
||||
except IndexError:
|
||||
continue
|
||||
if row[2] != progress_string:
|
||||
|
|
|
@ -246,58 +246,11 @@
|
|||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment45">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label39">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Uploaded:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment44">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label38">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Downloaded:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_total_uploaded">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">5</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -312,7 +265,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">5</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -322,33 +274,11 @@
|
|||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment48">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label42">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Down Speed:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_download_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">5</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -356,35 +286,11 @@
|
|||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment49">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label43">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Up Speed:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_upload_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">5</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -394,29 +300,6 @@
|
|||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment50">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label45">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">ETA:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_eta">
|
||||
<property name="visible">True</property>
|
||||
|
@ -527,38 +410,6 @@
|
|||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label41">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Share Ratio:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_share_ratio">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">4</property>
|
||||
<property name="right_attach">5</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVSeparator" id="vseparator1">
|
||||
<property name="visible">True</property>
|
||||
|
@ -596,11 +447,138 @@
|
|||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_share_ratio">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment44">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label38">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Downloaded:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment48">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label42">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Down Speed:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment49">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label43">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Up Speed:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment50">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label45">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">ETA:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment45">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label39">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Uploaded:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="summary_seed_rank">
|
||||
<property name="visible">True</property>
|
||||
|
@ -610,6 +588,29 @@
|
|||
<packing>
|
||||
<property name="left_attach">4</property>
|
||||
<property name="right_attach">5</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="right_padding">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label41">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Share Ratio:</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
|
|
|
@ -520,7 +520,7 @@ class ListView(object):
|
|||
column.set_clickable(True)
|
||||
column.set_resizable(True)
|
||||
column.set_expand(False)
|
||||
column.set_min_width(10)
|
||||
column.set_min_width(20)
|
||||
column.set_reorderable(True)
|
||||
column.set_visible(not hidden)
|
||||
column.connect('button-press-event',
|
||||
|
|
|
@ -300,9 +300,9 @@ class MainWindow(component.Component):
|
|||
def update(self):
|
||||
# Update the window title
|
||||
def _on_get_session_status(status):
|
||||
download_rate = deluge.common.fsize_short(status["payload_download_rate"])
|
||||
upload_rate = deluge.common.fsize_short(status["payload_upload_rate"])
|
||||
self.window.set_title("%s%s %s%s - Deluge" % (_("D:"), download_rate, _("U:"), upload_rate))
|
||||
download_rate = deluge.common.fspeed(status["payload_download_rate"], precision=0, shortform=True)
|
||||
upload_rate = deluge.common.fspeed(status["payload_upload_rate"], precision=0, shortform=True)
|
||||
self.window.set_title(_("D: %s U: %s - Deluge" % (download_rate, upload_rate)))
|
||||
if self.config["show_rate_in_title"]:
|
||||
client.core.get_session_status(["payload_download_rate",
|
||||
"payload_upload_rate"]).addCallback(_on_get_session_status)
|
||||
|
@ -311,7 +311,7 @@ class MainWindow(component.Component):
|
|||
if value:
|
||||
self.update()
|
||||
else:
|
||||
self.window.set_title("Deluge")
|
||||
self.window.set_title(_("Deluge"))
|
||||
|
||||
def on_newversionavailable_event(self, new_version):
|
||||
if self.config["show_new_releases"]:
|
||||
|
|
|
@ -25,9 +25,9 @@ log = logging.getLogger(__name__)
|
|||
|
||||
|
||||
def cell_data_progress(column, cell, model, row, data):
|
||||
value = model.get_value(row, data)
|
||||
cell.set_property("value", value * 100)
|
||||
cell.set_property("text", "%.2f%%" % (value * 100))
|
||||
value = model.get_value(row, data) * 100
|
||||
cell.set_property("value", value)
|
||||
cell.set_property("text", "%i%%" % value)
|
||||
|
||||
|
||||
class PeersTab(Tab):
|
||||
|
|
|
@ -18,8 +18,8 @@ from deluge.ui.gtkui.torrentdetails import Tab
|
|||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def fpeer_sized(first, second):
|
||||
return "%s (%s)" % (fsize(first), fsize(second))
|
||||
def ftotal_sized(first, second):
|
||||
return "%s (%s)" % (fsize(first, shortform=True), fsize(second, shortform=True))
|
||||
|
||||
|
||||
def fratio(value):
|
||||
|
@ -31,16 +31,18 @@ def fratio(value):
|
|||
|
||||
|
||||
def fpcnt(value, state):
|
||||
if state:
|
||||
state = _(state) + " "
|
||||
return "%s%.2f%%" % (state, value)
|
||||
textstr = _(state)
|
||||
if state not in ("Error", "Seeding") and value < 100:
|
||||
textstr = ('%s %.2f' % (textstr, value)).rstrip('0').rstrip('.') + '%'
|
||||
return textstr
|
||||
|
||||
|
||||
def fspeed_max(value, max_value=-1):
|
||||
value = fspeed(value, shortform=True)
|
||||
if max_value > -1:
|
||||
return "%s (%s %s)" % (fspeed(value), max_value, _("KiB/s"))
|
||||
return "%s (%s %s)" % (value, max_value, _("K/s"))
|
||||
else:
|
||||
return fspeed(value)
|
||||
return value
|
||||
|
||||
|
||||
def fdate_or_never(value):
|
||||
|
@ -59,6 +61,14 @@ def ftime_or_dash(value):
|
|||
return "-"
|
||||
|
||||
|
||||
def fseed_rank_or_dash(seed_rank, seeding_time):
|
||||
"""Display value if seeding otherwise dash"""
|
||||
if seeding_time > 0.0:
|
||||
return str(seed_rank)
|
||||
else:
|
||||
return "-"
|
||||
|
||||
|
||||
class StatusTab(Tab):
|
||||
def __init__(self):
|
||||
Tab.__init__(self)
|
||||
|
@ -74,9 +84,9 @@ class StatusTab(Tab):
|
|||
|
||||
self.label_widgets = [
|
||||
(builder.get_object("summary_availability"), fratio, ("distributed_copies",)),
|
||||
(builder.get_object("summary_total_downloaded"), fpeer_sized, ("all_time_download",
|
||||
(builder.get_object("summary_total_downloaded"), ftotal_sized, ("all_time_download",
|
||||
"total_payload_download")),
|
||||
(builder.get_object("summary_total_uploaded"), fpeer_sized, ("total_uploaded", "total_payload_upload")),
|
||||
(builder.get_object("summary_total_uploaded"), ftotal_sized, ("total_uploaded", "total_payload_upload")),
|
||||
(builder.get_object("summary_download_speed"), fspeed_max, ("download_payload_rate", "max_download_speed")),
|
||||
(builder.get_object("summary_upload_speed"), fspeed_max, ("upload_payload_rate", "max_upload_speed")),
|
||||
(builder.get_object("summary_seeds"), fpeer, ("num_seeds", "total_seeds")),
|
||||
|
@ -85,7 +95,7 @@ class StatusTab(Tab):
|
|||
(builder.get_object("summary_share_ratio"), fratio, ("ratio",)),
|
||||
(builder.get_object("summary_active_time"), ftime_or_dash, ("active_time",)),
|
||||
(builder.get_object("summary_seed_time"), ftime_or_dash, ("seeding_time",)),
|
||||
(builder.get_object("summary_seed_rank"), str, ("seed_rank",)),
|
||||
(builder.get_object("summary_seed_rank"), fseed_rank_or_dash, ("seed_rank", "seeding_time")),
|
||||
(builder.get_object("progressbar"), fpcnt, ("progress", "state")),
|
||||
(builder.get_object("summary_last_seen_complete"), fdate_or_never, ("last_seen_complete",)),
|
||||
(builder.get_object("summary_torrent_status"), str, ("message",)),
|
||||
|
|
|
@ -12,8 +12,8 @@ import logging
|
|||
import gobject
|
||||
import gtk
|
||||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from deluge.common import fsize, fspeed, get_pixmap
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.ui.client import client
|
||||
from deluge.ui.gtkui import common, dialogs
|
||||
|
@ -22,7 +22,7 @@ log = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class StatusBarItem(object):
|
||||
def __init__(self, image=None, stock=None, text=None, callback=None, tooltip=None):
|
||||
def __init__(self, image=None, stock=None, text=None, markup=False, callback=None, tooltip=None):
|
||||
self._widgets = []
|
||||
self._ebox = gtk.EventBox()
|
||||
self._hbox = gtk.HBox()
|
||||
|
@ -41,6 +41,9 @@ class StatusBarItem(object):
|
|||
self.set_image_from_stock(stock)
|
||||
|
||||
# Add text
|
||||
if markup:
|
||||
self.set_markup(text)
|
||||
else:
|
||||
self.set_text(text)
|
||||
|
||||
if callback is not None:
|
||||
|
@ -149,25 +152,25 @@ class StatusBar(component.Component):
|
|||
self.connections_item = self.add_item(
|
||||
stock=gtk.STOCK_NETWORK,
|
||||
callback=self._on_connection_item_clicked,
|
||||
tooltip=_("Connections"), pack_start=True)
|
||||
tooltip=_("Connections (Limit)"), pack_start=True)
|
||||
|
||||
self.download_item = self.add_item(
|
||||
image=deluge.common.get_pixmap("downloading16.png"),
|
||||
image=get_pixmap("downloading16.png"),
|
||||
callback=self._on_download_item_clicked,
|
||||
tooltip=_("Download Speed"), pack_start=True)
|
||||
tooltip=_("Download Speed (Limit)"), pack_start=True)
|
||||
|
||||
self.upload_item = self.add_item(
|
||||
image=deluge.common.get_pixmap("seeding16.png"),
|
||||
image=get_pixmap("seeding16.png"),
|
||||
callback=self._on_upload_item_clicked,
|
||||
tooltip=_("Upload Speed"), pack_start=True)
|
||||
tooltip=_("Upload Speed (Limit)"), pack_start=True)
|
||||
|
||||
self.traffic_item = self.add_item(
|
||||
image=deluge.common.get_pixmap("traffic16.png"),
|
||||
image=get_pixmap("traffic16.png"),
|
||||
callback=self._on_traffic_item_clicked,
|
||||
tooltip=_("Protocol Traffic Download/Upload"), pack_start=True)
|
||||
tooltip=_("Protocol Traffic (Down:Up)"), pack_start=True)
|
||||
|
||||
self.dht_item = StatusBarItem(
|
||||
image=deluge.common.get_pixmap("dht16.png"), tooltip=_("DHT Nodes"))
|
||||
image=get_pixmap("dht16.png"), tooltip=_("DHT Nodes"))
|
||||
|
||||
self.diskspace_item = self.add_item(
|
||||
stock=gtk.STOCK_HARDDISK,
|
||||
|
@ -176,8 +179,10 @@ class StatusBar(component.Component):
|
|||
|
||||
self.health_item = self.add_item(
|
||||
stock=gtk.STOCK_DIALOG_ERROR,
|
||||
text=_("No Incoming Connections!"),
|
||||
callback=self._on_health_icon_clicked, pack_start=True)
|
||||
text=_("<b><small>Port Issue</small></b>"),
|
||||
markup=True,
|
||||
tooltip=_("No incoming connections, check port forwarding"),
|
||||
callback=self._on_health_icon_clicked)
|
||||
|
||||
self.external_ip_item = self.add_item(
|
||||
tooltip=_("External IP Address"), pack_start=True)
|
||||
|
@ -221,10 +226,10 @@ class StatusBar(component.Component):
|
|||
self.hbox.pack_start(
|
||||
self.not_connected_item.get_eventbox(), expand=False, fill=False)
|
||||
|
||||
def add_item(self, image=None, stock=None, text=None, callback=None, tooltip=None, pack_start=False):
|
||||
def add_item(self, image=None, stock=None, text=None, markup=False, callback=None, tooltip=None, pack_start=False):
|
||||
"""Adds an item to the status bar"""
|
||||
# The return tuple.. we return whatever widgets we add
|
||||
item = StatusBarItem(image, stock, text, callback, tooltip)
|
||||
item = StatusBarItem(image, stock, text, markup, callback, tooltip)
|
||||
if pack_start:
|
||||
self.hbox.pack_start(item.get_eventbox(), expand=False, fill=False)
|
||||
else:
|
||||
|
@ -298,8 +303,8 @@ class StatusBar(component.Component):
|
|||
self.remove_item(self.dht_item)
|
||||
|
||||
def _on_get_session_status(self, status):
|
||||
self.download_rate = deluge.common.fspeed(status["payload_download_rate"])
|
||||
self.upload_rate = deluge.common.fspeed(status["payload_upload_rate"])
|
||||
self.download_rate = fspeed(status["payload_download_rate"], precision=0, shortform=True)
|
||||
self.upload_rate = fspeed(status["payload_upload_rate"], precision=0, shortform=True)
|
||||
self.download_protocol_rate = (status["download_rate"] - status["payload_download_rate"]) / 1024
|
||||
self.upload_protocol_rate = (status["upload_rate"] - status["payload_upload_rate"]) / 1024
|
||||
self.num_connections = status["num_peers"]
|
||||
|
@ -319,7 +324,7 @@ class StatusBar(component.Component):
|
|||
|
||||
def _on_get_free_space(self, space):
|
||||
if space >= 0:
|
||||
self.diskspace_item.set_text(deluge.common.fsize(space))
|
||||
self.diskspace_item.set_markup("<small>%s</small>" % fsize(space, shortform=True))
|
||||
else:
|
||||
self.diskspace_item.set_markup("<span foreground=\"red\">" + _("Error") + "</span>")
|
||||
|
||||
|
@ -333,44 +338,44 @@ class StatusBar(component.Component):
|
|||
|
||||
def _on_get_external_ip(self, external_ip):
|
||||
ip = external_ip if external_ip else _("n/a")
|
||||
self.external_ip_item.set_markup(_("<b>IP</b> %s") % ip)
|
||||
self.external_ip_item.set_markup(_("<b>IP</b> <small>%s</small>") % ip)
|
||||
|
||||
def update_connections_label(self):
|
||||
# Set the max connections label
|
||||
if self.max_connections_global < 0:
|
||||
label_string = "%s" % self.num_connections
|
||||
else:
|
||||
label_string = "%s (%s)" % (self.num_connections, self.max_connections_global)
|
||||
label_string = "%s <small>(%s)</small>" % (self.num_connections, self.max_connections_global)
|
||||
|
||||
self.connections_item.set_text(label_string)
|
||||
self.connections_item.set_markup(label_string)
|
||||
|
||||
def update_dht_label(self):
|
||||
# Set the max connections label
|
||||
self.dht_item.set_text("%s" % (self.dht_nodes))
|
||||
self.dht_item.set_markup("<small>%s</small>" % (self.dht_nodes))
|
||||
|
||||
def update_download_label(self):
|
||||
# Set the download speed label
|
||||
if self.max_download_speed <= 0:
|
||||
label_string = self.download_rate
|
||||
else:
|
||||
label_string = "%s (%s %s)" % (
|
||||
self.download_rate, self.max_download_speed, _("KiB/s"))
|
||||
label_string = "%s <small>(%i %s)</small>" % (
|
||||
self.download_rate, self.max_download_speed, _("K/s"))
|
||||
|
||||
self.download_item.set_text(label_string)
|
||||
self.download_item.set_markup(label_string)
|
||||
|
||||
def update_upload_label(self):
|
||||
# Set the upload speed label
|
||||
if self.max_upload_speed <= 0:
|
||||
label_string = self.upload_rate
|
||||
else:
|
||||
label_string = "%s (%s %s)" % (
|
||||
self.upload_rate, self.max_upload_speed, _("KiB/s"))
|
||||
label_string = "%s <small>(%i %s)</small>" % (
|
||||
self.upload_rate, self.max_upload_speed, _("K/s"))
|
||||
|
||||
self.upload_item.set_text(label_string)
|
||||
self.upload_item.set_markup(label_string)
|
||||
|
||||
def update_traffic_label(self):
|
||||
label_string = "%i/%i %s" % (self.download_protocol_rate, self.upload_protocol_rate, _("KiB/s"))
|
||||
self.traffic_item.set_text(label_string)
|
||||
label_string = "<small>%i:%i %s</small>" % (self.download_protocol_rate, self.upload_protocol_rate, _("K/s"))
|
||||
self.traffic_item.set_markup(label_string)
|
||||
|
||||
def update(self):
|
||||
self.send_status_request()
|
||||
|
@ -379,9 +384,9 @@ class StatusBar(component.Component):
|
|||
log.debug("_on_set_unlimit_other %s", core_key)
|
||||
other_dialog_info = {
|
||||
"max_download_speed": (_("Download Speed Limit"), _("Set the maximum download speed"),
|
||||
_("KiB/s"), "downloading.svg", self.max_download_speed),
|
||||
_("K/s"), "downloading.svg", self.max_download_speed),
|
||||
"max_upload_speed": (_("Upload Speed Limit"), _("Set the maximum upload speed"),
|
||||
_("KiB/s"), "seeding.svg", self.max_upload_speed),
|
||||
_("K/s"), "seeding.svg", self.max_upload_speed),
|
||||
"max_connections_global": (_("Incoming Connections"), _("Set the maximum incoming connections"),
|
||||
"", gtk.STOCK_NETWORK, self.max_connections_global)
|
||||
}
|
||||
|
@ -413,7 +418,7 @@ class StatusBar(component.Component):
|
|||
self.config["tray_download_speed_list"],
|
||||
self._on_set_download_speed,
|
||||
self.max_download_speed,
|
||||
_("KiB/s"), show_notset=True, show_other=True)
|
||||
_("K/s"), show_notset=True, show_other=True)
|
||||
menu.show_all()
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
|
||||
|
@ -426,7 +431,7 @@ class StatusBar(component.Component):
|
|||
self.config["tray_upload_speed_list"],
|
||||
self._on_set_upload_speed,
|
||||
self.max_upload_speed,
|
||||
_("KiB/s"), show_notset=True, show_other=True)
|
||||
_("K/s"), show_notset=True, show_other=True)
|
||||
menu.show_all()
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import gtk
|
|||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from deluge.common import fspeed
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.ui.client import client
|
||||
from deluge.ui.gtkui import dialogs
|
||||
|
@ -192,8 +193,8 @@ class SystemTray(component.Component):
|
|||
self.build_tray_bwsetsubmenu()
|
||||
|
||||
def _on_get_session_status(self, status):
|
||||
self.download_rate = deluge.common.fsize(status["payload_download_rate"])
|
||||
self.upload_rate = deluge.common.fsize(status["payload_upload_rate"])
|
||||
self.download_rate = fspeed(status["payload_download_rate"], shortform=True)
|
||||
self.upload_rate = fspeed(status["payload_upload_rate"], shortform=True)
|
||||
|
||||
def update(self):
|
||||
if not self.config["enable_system_tray"]:
|
||||
|
@ -214,11 +215,11 @@ class SystemTray(component.Component):
|
|||
if max_download_speed == -1:
|
||||
max_download_speed = _("Unlimited")
|
||||
else:
|
||||
max_download_speed = "%s %s" % (max_download_speed, _("KiB/s"))
|
||||
max_download_speed = "%s %s" % (max_download_speed, _("K/s"))
|
||||
if max_upload_speed == -1:
|
||||
max_upload_speed = _("Unlimited")
|
||||
else:
|
||||
max_upload_speed = "%s %s" % (max_upload_speed, _("KiB/s"))
|
||||
max_upload_speed = "%s %s" % (max_upload_speed, _("K/s"))
|
||||
|
||||
msg = '%s\n%s: %s (%s)\n%s: %s (%s)' % (
|
||||
_("Deluge"), _("Down"), self.download_rate,
|
||||
|
@ -235,14 +236,14 @@ class SystemTray(component.Component):
|
|||
submenu_bwdownset = build_menu_radio_list(
|
||||
self.config["tray_download_speed_list"], self.on_tray_setbwdown,
|
||||
self.max_download_speed,
|
||||
_("KiB/s"), show_notset=True, show_other=True
|
||||
_("K/s"), show_notset=True, show_other=True
|
||||
)
|
||||
|
||||
# Create the Upload speed list sub-menu
|
||||
submenu_bwupset = build_menu_radio_list(
|
||||
self.config["tray_upload_speed_list"], self.on_tray_setbwup,
|
||||
self.max_upload_speed,
|
||||
_("KiB/s"), show_notset=True, show_other=True
|
||||
_("K/s"), show_notset=True, show_other=True
|
||||
)
|
||||
# Add the sub-menus to the tray menu
|
||||
self.builder.get_object("menuitem_download_limit").set_submenu(
|
||||
|
@ -393,7 +394,7 @@ class SystemTray(component.Component):
|
|||
if widget.get_name() == "unlimited":
|
||||
set_value(-1)
|
||||
elif widget.get_name() == "other":
|
||||
dialog = dialogs.OtherDialog(header, text, _("KiB/s"), image, default)
|
||||
dialog = dialogs.OtherDialog(header, text, _("K/s"), image, default)
|
||||
dialog.run().addCallback(set_value)
|
||||
else:
|
||||
set_value(widget.get_children()[0].get_text().split(" ")[0])
|
||||
|
|
|
@ -140,7 +140,7 @@ def cell_data_progress(column, cell, model, row, data):
|
|||
# Marked for translate states text are in filtertreeview
|
||||
textstr = _(state_str)
|
||||
if state_str not in ("Error", "Seeding") and value < 100:
|
||||
textstr = "%s %.2f%%" % (textstr, value)
|
||||
textstr = "%s %i%%" % (textstr, value)
|
||||
|
||||
if func_last_value["cell_data_progress"][1] != textstr:
|
||||
func_last_value["cell_data_progress"][1] = textstr
|
||||
|
@ -172,10 +172,11 @@ def cell_data_speed(cell, model, row, data, cache_key):
|
|||
return
|
||||
func_last_value[cache_key] = speed
|
||||
|
||||
speed_str = ""
|
||||
if speed > 0:
|
||||
speed_str = common.fspeed(speed)
|
||||
cell.set_property('text', speed_str)
|
||||
speed_str = common.fspeed(speed, shortform=True)
|
||||
cell.set_property("markup", "{0} <small>{1}</small>".format(*tuple(speed_str.split())))
|
||||
else:
|
||||
cell.set_property("text", "")
|
||||
|
||||
|
||||
def cell_data_speed_down(column, cell, model, row, data):
|
||||
|
@ -196,10 +197,11 @@ def cell_data_speed_limit(cell, model, row, data, cache_key):
|
|||
return
|
||||
func_last_value[cache_key] = speed
|
||||
|
||||
speed_str = ""
|
||||
if speed > 0:
|
||||
speed_str = common.fspeed(speed * 1024)
|
||||
cell.set_property('text', speed_str)
|
||||
speed_str = common.fspeed(speed * 1024, shortform=True)
|
||||
cell.set_property("markup", "{0} <small>{1}</small>".format(*tuple(speed_str.split())))
|
||||
else:
|
||||
cell.set_property("text", "")
|
||||
|
||||
|
||||
def cell_data_speed_limit_down(column, cell, model, row, data):
|
||||
|
@ -213,7 +215,7 @@ def cell_data_speed_limit_up(column, cell, model, row, data):
|
|||
def cell_data_size(column, cell, model, row, data):
|
||||
"""Display value in terms of size, eg. 2 MB"""
|
||||
size = model.get_value(row, data)
|
||||
cell.set_property('text', common.fsize(size))
|
||||
cell.set_property('text', common.fsize(size, shortform=True))
|
||||
|
||||
|
||||
def cell_data_peer(column, cell, model, row, data):
|
||||
|
@ -241,13 +243,13 @@ def cell_data_time(column, cell, model, row, data):
|
|||
|
||||
|
||||
def cell_data_ratio(cell, model, row, data, cache_key):
|
||||
"""Display value as a ratio with a precision of 3."""
|
||||
"""Display value as a ratio with a precision of 2."""
|
||||
ratio = model.get_value(row, data)
|
||||
# Previous value in cell is the same as for this value, so ignore
|
||||
if func_last_value[cache_key] == ratio:
|
||||
return
|
||||
func_last_value[cache_key] = ratio
|
||||
cell.set_property('text', "∞" if ratio < 0 else "%.3f" % ratio)
|
||||
cell.set_property("text", "∞" if ratio < 0 else ("%.1f" % ratio).rstrip("0").rstrip("."))
|
||||
|
||||
|
||||
def cell_data_ratio_seeds_peers(column, cell, model, row, data):
|
||||
|
@ -270,7 +272,7 @@ def cell_data_date(column, cell, model, row, data, key):
|
|||
return
|
||||
func_last_value[key] = date
|
||||
|
||||
date_str = common.fdate(date) if date > 0 else ""
|
||||
date_str = common.fdate(date, date_only=True) if date > 0 else ""
|
||||
cell.set_property('text', date_str)
|
||||
|
||||
cell_data_date_added = partial(cell_data_date, key="cell_data_date_added")
|
||||
|
@ -285,5 +287,5 @@ def cell_data_date_or_never(column, cell, model, row, data):
|
|||
return
|
||||
func_last_value["cell_data_date_or_never"] = value
|
||||
|
||||
date_str = common.fdate(value) if value > 0 else _("Never")
|
||||
date_str = common.fdate(value, date_only=True) if value > 0 else _("Never")
|
||||
cell.set_property('text', date_str)
|
||||
|
|
Loading…
Reference in New Issue