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)
|