File: log.py

package info (click to toggle)
sql-editor 0.4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 116 kB
  • ctags: 140
  • sloc: python: 1,091; makefile: 46; sh: 28
file content (84 lines) | stat: -rw-r--r-- 2,306 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

__doc__="a class for logging"

from gtk import *
import time

class log_widget:
    #last log time
    __log_time=0.0
    #list of levels
    __levels=[]
    #list of messages
    __messages=[]
    #pop is running
    __popping=FALSE
    
    def __init__(self):

    
        st=GtkStatusbar()
        st.show()
        self.statusbar_status=st
        #for outside
        self.widget=st
        self.__widget=st                

        #FIXME: I dont really understand this
        self.context=st.get_context_id ('any case')

        st.connect("destroy",self.stop)

        self.def_style=st.get_style()

    def __del__(self):
        self.__popping=FALSE
        
    def stop(self,data):
        self.__popping=FALSE
        
    #methods
    def pop(self,data):
        if self.__levels and self.__popping:
            self.statusbar_status.pop(self.__levels[0])
            self.__levels=self.__levels[1:]
            self.__messages=self.__messages[1:]
            if self.__levels and self.__popping:
                n=len(self.__levels)-1
                m=self.__messages[0]
                if n>0:
                    m=m+ ('\n(%s more)' % n)
                self.statusbar_status.push(self.__levels[0],
                                           m)
            #FIXME doesnt work..
            else:
                self.statusbar_status.bg = self.def_style.fg[STATE_NORMAL]
            return TRUE
        else:
            self.__popping=FALSE
            return FALSE
    
    def log(self,level,text):
        #FIXME: I dont know the right way to use this... and it shows!
        level=self.context
        
        self.__levels.append(level)
        self.__messages.append(text)
        if not self.__popping:
            self.statusbar_status.push(self.__levels[0],
                                       self.__messages[0])
        #FIXME doesnt work..
        self.statusbar_status.bg = self.def_style.black
        
        #no:self.statusbar_status.push(level,text)
        #it is a first in-first out
        while events_pending():
            #this is not main_iteration... but instead:
            mainiteration()
        self.__log_time=time.time()

        if not self.__popping:
            self.__popping=TRUE
            timeout_add(2500,self.pop,self)