Use GdkColors for level column, cleanup color handling

This commit is contained in:
René Stadler 2008-01-23 14:51:14 +02:00 committed by Stefan Sauer
parent 9fe8b55ecb
commit e5d490cabe
3 changed files with 45 additions and 33 deletions

View file

@ -99,6 +99,12 @@ debug_level_warning = DebugLevel ("WARN")
debug_level_info = DebugLevel ("INFO") debug_level_info = DebugLevel ("INFO")
debug_level_debug = DebugLevel ("DEBUG") debug_level_debug = DebugLevel ("DEBUG")
debug_level_log = DebugLevel ("LOG") debug_level_log = DebugLevel ("LOG")
debug_levels = [debug_level_none,
debug_level_log,
debug_level_debug,
debug_level_info,
debug_level_warning,
debug_level_error]
# For stripping color codes: # For stripping color codes:
_escape = re.compile ("\x1b\\[[0-9;]*m") _escape = re.compile ("\x1b\\[[0-9;]*m")

View file

@ -53,6 +53,10 @@ class Color (object):
self._fields = tuple ((int (hs, 16) for hs in (s[:2], s[2:4], s[4:],))) self._fields = tuple ((int (hs, 16) for hs in (s[:2], s[2:4], s[4:],)))
def gdk_color (self):
return gtk.gdk.color_parse (self.hex_string ())
def hex_string (self): def hex_string (self):
return "#%02x%02x%02x" % self._fields return "#%02x%02x%02x" % self._fields
@ -84,7 +88,9 @@ class TangoPalette (ColorPalette):
def __init__ (self): def __init__ (self):
for name, r, g, b in [("butter1", 252, 233, 79), for name, r, g, b in [("black", 0, 0, 0,),
("white", 255, 255, 255,),
("butter1", 252, 233, 79),
("butter2", 237, 212, 0), ("butter2", 237, 212, 0),
("butter3", 196, 160, 0), ("butter3", 196, 160, 0),
("chameleon1", 138, 226, 52), ("chameleon1", 138, 226, 52),
@ -119,21 +125,9 @@ class ColorTheme (object):
self.colors = {} self.colors = {}
def add_color (self, key, fg_color, bg_color = None, bg_color2 = None): def add_color (self, key, *colors):
self.colors[key] = (fg_color, bg_color, bg_color2,) self.colors[key] = colors
def colors_float (self, key):
return tuple ((self.hex_string_to_floats (color)
for color in self.colors[key]))
@staticmethod
def hex_string_to_floats (s):
if s.startswith ("#"):
s = s[1:]
return tuple ((float (int (hs, 16)) / 255. for hs in (s[:2], s[2:4], s[4:],)))
class LevelColorTheme (ColorTheme): class LevelColorTheme (ColorTheme):
@ -145,12 +139,19 @@ class LevelColorThemeTango (LevelColorTheme):
LevelColorTheme.__init__ (self) LevelColorTheme.__init__ (self)
self.add_color (Data.debug_level_none, None, None, None) p = TangoPalette.get ()
self.add_color (Data.debug_level_log, "#000000", "#ad7fa8", "#e0a4d9") self.add_color (Data.debug_level_none,
self.add_color (Data.debug_level_debug, "#000000", "#729fcf", "#8cc4ff") None, None, None)
self.add_color (Data.debug_level_info, "#000000", "#8ae234", "#9dff3b") self.add_color (Data.debug_level_log,
self.add_color (Data.debug_level_warning, "#000000", "#fcaf3e", "#ffc266") p.black, p.plum1, Color ("#e0a4d9"))
self.add_color (Data.debug_level_error, "#ffffff", "#ef2929", "#ff4545") self.add_color (Data.debug_level_debug,
p.black, p.skyblue1, Color ("#8cc4ff"))
self.add_color (Data.debug_level_info,
p.black, p.chameleon1, Color ("#9dff3b"))
self.add_color (Data.debug_level_warning,
p.black, p.orange1, Color ("#ffc266"))
self.add_color (Data.debug_level_error,
p.white, p.scarletred1, Color ("#ff4545"))
class ThreadColorTheme (ColorTheme): class ThreadColorTheme (ColorTheme):
@ -893,16 +894,21 @@ class LevelColumn (TextColumn):
def get_data_func (): def get_data_func ():
theme = LevelColorThemeTango () theme = LevelColorThemeTango ()
colors = theme.colors colors = dict ((level, tuple ((c.gdk_color ()
for c in theme.colors[level])),)
for level in Data.debug_levels
if level != Data.debug_level_none)
def level_data_func (cell_props, level, path): def level_data_func (cell_props, level, path):
cell_props.text = level.name[0] cell_props.text = level.name[0]
cell_colors = colors[level] if level in colors:
# FIXME: Use GdkColors! cell_colors = colors[level]
cell_props.foreground = cell_colors[0]
if path[0] % 2:
cell_props.background = cell_colors[1]
else: else:
cell_props.background = cell_colors[2] cell_colors = (None, None, None,)
cell_props.foreground_gdk = cell_colors[0]
if path[0] % 2:
cell_props.background_gdk = cell_colors[1]
else:
cell_props.background_gdk = cell_colors[2]
return level_data_func return level_data_func

View file

@ -499,7 +499,7 @@ class TimelineWidget (gtk.DrawingArea):
self.logger.debug ("level distribution sentinel has no data yet") self.logger.debug ("level distribution sentinel has no data yet")
return return
theme = GUI.LevelColorThemeTango () colors = GUI.LevelColorThemeTango ().colors
dist_data = self.process.dist_sentinel.data dist_data = self.process.dist_sentinel.data
def cumulative_level_counts (*levels): def cumulative_level_counts (*levels):
@ -508,18 +508,18 @@ class TimelineWidget (gtk.DrawingArea):
level = Data.debug_level_info level = Data.debug_level_info
levels_prev = (Data.debug_level_log, Data.debug_level_debug,) levels_prev = (Data.debug_level_log, Data.debug_level_debug,)
ctx.set_source_rgb (*(theme.colors_float (level)[1])) ctx.set_source_rgb (*(colors[level][1].float_tuple ()))
self.__draw_graph (ctx, w, h, maximum, self.__draw_graph (ctx, w, h, maximum,
list (cumulative_level_counts (level, *levels_prev))) list (cumulative_level_counts (level, *levels_prev)))
level = Data.debug_level_debug level = Data.debug_level_debug
levels_prev = (Data.debug_level_log,) levels_prev = (Data.debug_level_log,)
ctx.set_source_rgb (*(theme.colors_float (level)[1])) ctx.set_source_rgb (*(colors[level][1].float_tuple ()))
self.__draw_graph (ctx, w, h, maximum, self.__draw_graph (ctx, w, h, maximum,
list (cumulative_level_counts (level, *levels_prev))) list (cumulative_level_counts (level, *levels_prev)))
level = Data.debug_level_log level = Data.debug_level_log
ctx.set_source_rgb (*(theme.colors_float (level)[1])) ctx.set_source_rgb (*(colors[level][1].float_tuple ()))
self.__draw_graph (ctx, w, h, maximum, [counts[level] for counts in dist_data]) self.__draw_graph (ctx, w, h, maximum, [counts[level] for counts in dist_data])
# Draw error and warning triangle indicators: # Draw error and warning triangle indicators:
@ -531,7 +531,7 @@ class TimelineWidget (gtk.DrawingArea):
ctx.close_path () ctx.close_path ()
for level in (Data.debug_level_warning, Data.debug_level_error,): for level in (Data.debug_level_warning, Data.debug_level_error,):
ctx.set_source_rgb (*(theme.colors_float (level)[1])) ctx.set_source_rgb (*(colors[level][1].float_tuple ()))
for i, counts in enumerate (dist_data): for i, counts in enumerate (dist_data):
if counts[level] == 0: if counts[level] == 0:
continue continue