Audio/AudioControl: Lots of fixes
[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             self._logfile.flush()
30         lines = self._wrapper.wrap(text)
31         lines = lines[max(0,len(lines)-self._textwin.getmaxyx()[0]):]
32         self._textwin.scroll(len(lines))
33         for i in range(min(len(lines),self._textwin.getmaxyx()[0]-2)):
34             self._textwin.addstr(self._textwin.getmaxyx()[0]-len(lines)+i,0,
35                                  lines[i])
36         self._textwin.nooutrefresh()
37
38 def log(src,msg):
39     if logger:
40         logger.log(src,msg)