Consolidated termsink into one class
[debian/gnuradio] / gr-wxgui / src / python / termsink.py
1 #
2 # Copyright 2009 Free Software Foundation, Inc.
3 #
4 # This file is part of GNU Radio
5 #
6 # GNU Radio is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3, or (at your option)
9 # any later version.
10 #
11 # GNU Radio is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with GNU Radio; see the file COPYING.  If not, write to
18 # the Free Software Foundation, Inc., 51 Franklin Street,
19 # Boston, MA 02110-1301, USA.
20 #
21
22 from gnuradio import gru
23 import wx
24
25 DEFAULT_WIN_SIZE = (600, 300)
26 APPEND_EVENT = wx.NewEventType()
27 EVT_APPEND_EVENT = wx.PyEventBinder(APPEND_EVENT, 0)
28
29 class AppendEvent(wx.PyEvent):
30     def __init__(self, text):
31         wx.PyEvent.__init__(self)
32         self.SetEventType(APPEND_EVENT)
33         self.text = text
34
35     def Clone(self):
36         self.__class__(self.GetId())
37
38 class termsink(wx.Panel):
39         def __init__(self,
40                      parent,
41                      msgq,
42                      size=DEFAULT_WIN_SIZE,
43                      ):
44
45                 wx.Panel.__init__(self,
46                                   parent,
47                                   size=size,
48                                   style=wx.SIMPLE_BORDER,
49                                   )
50
51                 self.text_ctrl = wx.TextCtrl(self,
52                                              wx.ID_ANY,
53                                              value="",
54                                              size=size,
55                                              style=wx.TE_MULTILINE|wx.TE_READONLY,
56                                              )
57
58                 main_sizer = wx.BoxSizer(wx.VERTICAL)
59                 main_sizer.Add(self.text_ctrl, 1, wx.EXPAND)
60                 self.SetSizerAndFit(main_sizer)
61
62                 EVT_APPEND_EVENT(self, self.evt_append)
63                 self.runner = gru.msgq_runner(msgq, self.handle_msg)
64
65         def handle_msg(self, msg):
66                 # This gets called in the queue runner thread context
67                 # For now, just add whatever the user sends to the text control
68                 text = msg.to_string()
69                 print "handle_msg: received", len(text), "bytes"
70
71                 # Create a wxPython event and post it to the event queue
72                 evt = AppendEvent(text)
73                 wx.PostEvent(self, evt)
74                 del evt
75
76         def evt_append(self, evt):
77                 # This gets called by the wxPython event queue runner
78                 print "appending", len(evt.text), "bytes"
79                 self.text_ctrl.AppendText(evt.text)