~marco-crosio/pyroom/austosave

« back to all changes in this revision

Viewing changes to status_label.py

  • Committer: markino
  • Date: 2008-02-18 21:32:08 UTC
  • Revision ID: markino@casseruola-20080218213208-u59318mvs4tz6ycv
Modularized and Integrated with main trunk (rev27)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
#Includes the class for status label.
 
3
 
 
4
import gobject
 
5
import gtk
 
6
 
 
7
class FadeLabel(gtk.Label):
 
8
    """ GTK Label with timed fade out effect """
 
9
 
 
10
    active_duration = 3000  # Fade start after this time
 
11
    fade_duration = 1500.0  # Fade duration
 
12
 
 
13
    def __init__(self, message='', active_color=None, inactive_color=None):
 
14
        gtk.Label.__init__(self, message)
 
15
        if not active_color:
 
16
            active_color = '#ffffff'
 
17
        self.active_color = active_color
 
18
        if not inactive_color:
 
19
            inactive_color = '#000000'
 
20
        self.inactive_color = inactive_color
 
21
        self.idle = 0
 
22
 
 
23
    def set_text(self, message, duration=None):
 
24
        if not duration:
 
25
            duration = self.active_duration
 
26
        self.modify_fg(gtk.STATE_NORMAL,
 
27
                       gtk.gdk.color_parse(self.active_color))
 
28
        gtk.Label.set_text(self, message)
 
29
        if self.idle:
 
30
            gobject.source_remove(self.idle)
 
31
        self.idle = gobject.timeout_add(duration, self.fade_start)
 
32
 
 
33
    def fade_start(self):
 
34
        self.fade_level = 1.0
 
35
        if self.idle:
 
36
            gobject.source_remove(self.idle)
 
37
        self.idle = gobject.timeout_add(25, self.fade_out)
 
38
 
 
39
    def fade_out(self):
 
40
        color = gtk.gdk.color_parse(self.inactive_color)
 
41
        (red1, green1, blue1) = (color.red, color.green, color.blue)
 
42
        color = gtk.gdk.color_parse(self.active_color)
 
43
        (red2, green2, blue2) = (color.red, color.green, color.blue)
 
44
        red = red1 + int(self.fade_level * abs(red1 - red2))
 
45
        green = green1 + int(self.fade_level * abs(green1 - green2))
 
46
        blue = blue1 + int(self.fade_level * abs(blue1 - blue2))
 
47
        self.modify_fg(gtk.STATE_NORMAL, gtk.gdk.Color(red, green, blue))
 
48
        self.fade_level -= 1.0 / (self.fade_duration / 25)
 
49
        if self.fade_level > 0:
 
50
            return True
 
51
        self.idle = 0
 
52
        return False
 
53
 
 
54
# EOF