Modified NetworkGraph to use new ColorRangeModule class.

This commit is contained in:
facetoe 2014-10-11 16:02:33 +08:00
parent 20363b9da0
commit 2e7df52394

View File

@ -1,10 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from colour import Color from i3pystatus.core.color import ColorRangeModule
from i3pystatus.network_traffic import NetworkTraffic from i3pystatus.network_traffic import NetworkTraffic
from i3pystatus.core.util import make_graph from i3pystatus.core.util import make_graph
class NetworkGraph(NetworkTraffic): class NetworkGraph(NetworkTraffic, ColorRangeModule):
""" """
Shows Network activity as a Unicode graph Shows Network activity as a Unicode graph
@ -29,8 +29,6 @@ class NetworkGraph(NetworkTraffic):
) )
format = "{network_graph}{kbs}KB/s" format = "{network_graph}{kbs}KB/s"
start_color = "#00FF00"
end_color = 'red'
graph_type = 'input' graph_type = 'input'
interval = 1 interval = 1
@ -41,55 +39,6 @@ class NetworkGraph(NetworkTraffic):
self.colors = self.get_hex_color_range(self.start_color, self.end_color, int(self.upper_limit)) self.colors = self.get_hex_color_range(self.start_color, self.end_color, int(self.upper_limit))
self.kbs_arr = [0.0] * self.graph_width self.kbs_arr = [0.0] * self.graph_width
@staticmethod
def get_hex_color_range(start_color, end_color, quantity):
"""
Generates a list of quantity Hex colors from start_color to end_color.
:param start_color: Hex or plain English color for start of range
:param end_color: Hex or plain English color for end of range
:param quantity: Number of colours to return
:return: A list of Hex color values
"""
raw_colors = [c.hex for c in list(Color(start_color).range_to(Color(end_color), quantity))]
colors = []
for color in raw_colors:
# i3bar expects the full Hex value but for some colors the colour
# module only returns partial values. So we need to convert these colors to the full
# Hex value.
if len(color) == 4:
fixed_color = "#"
for c in color[1:]:
fixed_color += c * 2
colors.append(fixed_color)
else:
colors.append(color)
return colors
def get_gradient(self, value):
"""
Map a value to a color
:param value: Some value
:return: A Hex color code
"""
index = int(self.percentage(value, self.upper_limit))
if index >= len(self.colors):
return self.colors[-1]
elif index < 0:
return self.colors[0]
else:
return self.colors[index]
@staticmethod
def percentage(part, whole):
"""
Calculate percentage
"""
if whole == 0:
return 0
return 100 * float(part) / float(whole)
def run(self): def run(self):
self.update_counters() self.update_counters()
if not self.pnic_before: if not self.pnic_before:
@ -106,7 +55,7 @@ class NetworkGraph(NetworkTraffic):
self.kbs_arr.insert(0, kbs) self.kbs_arr.insert(0, kbs)
self.kbs_arr = self.kbs_arr[:self.graph_width] self.kbs_arr = self.kbs_arr[:self.graph_width]
color = self.get_gradient(kbs) color = self.get_gradient(kbs, self.colors, self.upper_limit)
network_graph = make_graph(self.kbs_arr, self.upper_limit) network_graph = make_graph(self.kbs_arr, self.upper_limit)
self.output = { self.output = {