93bc12e40d8846ec1aeb70ed2a0e4bc93be6ac6f
[audiocontrol.git] / Logger.py
1 import textwrap, time
2
3 logger = None
4
5 def init(viewmanager, x, y, dx, dy, logfile=None):
6     global logger
7     logger = Logger(viewmanager.win(), x, y, dx, dy, logfile)
8
9 class Logger(object):
10
11     def __init__(self, win, x, y, dx, dy, logfile=None):
12         self._win = win.derwin(dy,dx,y,x)
13         self._win.border()
14         self._win.addstr(0,2,' Log ')
15         self._win.nooutrefresh()
16         self._textwin = self._win.derwin(dy-2,dx-3,1,2)
17         self._textwin.scrollok(1)
18         self._wrapper = textwrap.TextWrapper(width = dx-4,
19                                              subsequent_indent = ' '*4)
20         if logfile:
21             self._logfile = file(logfile,"a")
22         else:
23             self._logfile = None
24         
25     def log(self, src, msg):
26         text = '[%s] (%s) %s' %  (time.strftime("%H:%M:%S",time.localtime()),src, msg)
27         if self._logfile:
28             self._logfile.write(text+"\n")
29         lines = self._wrapper.wrap(text)
30         lines = lines[max(0,len(lines)-self._textwin.getmaxyx()[0]):]
31         self._textwin.scroll(len(lines))
32         for i in range(min(len(lines),self._textwin.getmaxyx()[0]-2)):
33             self._textwin.addstr(self._textwin.getmaxyx()[0]-len(lines)+i,0,
34                                  lines[i])
35         self._textwin.nooutrefresh()
36
37 def log(src,msg):
38     if logger:
39         logger.log(src,msg)