diff options
-rw-r--r-- | gr-wxgui/src/python/Makefile.am | 13 | ||||
-rw-r--r-- | gr-wxgui/src/python/termsink.py | 77 | ||||
-rw-r--r-- | grc/blocks/Makefile.am | 1 | ||||
-rw-r--r-- | grc/blocks/block_tree.xml | 1 | ||||
-rw-r--r-- | grc/blocks/wxgui_termsink.xml | 55 |
5 files changed, 141 insertions, 6 deletions
diff --git a/gr-wxgui/src/python/Makefile.am b/gr-wxgui/src/python/Makefile.am index e06298a2d..2382d599c 100644 --- a/gr-wxgui/src/python/Makefile.am +++ b/gr-wxgui/src/python/Makefile.am @@ -1,23 +1,23 @@ # -# Copyright 2004,2005,2008 Free Software Foundation, Inc. -# +# Copyright 2004,2005,2008,2009 Free Software Foundation, Inc. +# # This file is part of GNU Radio -# +# # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. -# +# # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. -# +# include $(top_srcdir)/Makefile.common @@ -53,6 +53,7 @@ ourpython_PYTHON = \ scopesink_nongl.py \ scopesink_gl.py \ scope_window.py \ + termsink.py \ waterfallsink2.py \ waterfallsink_nongl.py \ waterfallsink_gl.py \ diff --git a/gr-wxgui/src/python/termsink.py b/gr-wxgui/src/python/termsink.py new file mode 100644 index 000000000..a0cfd575d --- /dev/null +++ b/gr-wxgui/src/python/termsink.py @@ -0,0 +1,77 @@ +# +# Copyright 2009 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from gnuradio import gru +import wx + +DEFAULT_WIN_SIZE = (600, 300) +APPEND_EVENT = wx.NewEventType() +EVT_APPEND_EVENT = wx.PyEventBinder(APPEND_EVENT, 0) + +class AppendEvent(wx.PyEvent): + def __init__(self, text): + wx.PyEvent.__init__(self) + self.SetEventType(APPEND_EVENT) + self.text = text + + def Clone(self): + self.__class__(self.GetId()) + +class termsink(wx.Panel): + def __init__(self, + parent, + msgq, + size=DEFAULT_WIN_SIZE, + ): + + wx.Panel.__init__(self, + parent, + size=size, + style=wx.SIMPLE_BORDER, + ) + + self.text_ctrl = wx.TextCtrl(self, + wx.ID_ANY, + value="", + size=size, + style=wx.TE_MULTILINE|wx.TE_READONLY, + ) + + main_sizer = wx.BoxSizer(wx.VERTICAL) + main_sizer.Add(self.text_ctrl, 1, wx.EXPAND) + self.SetSizerAndFit(main_sizer) + + EVT_APPEND_EVENT(self, self.evt_append) + self.runner = gru.msgq_runner(msgq, self.handle_msg) + + def handle_msg(self, msg): + # This gets called in the queue runner thread context + # For now, just add whatever the user sends to the text control + text = msg.to_string() + + # Create a wxPython event and post it to the event queue + evt = AppendEvent(text) + wx.PostEvent(self, evt) + del evt + + def evt_append(self, evt): + # This gets called by the wxPython event queue runner + self.text_ctrl.AppendText(evt.text) diff --git a/grc/blocks/Makefile.am b/grc/blocks/Makefile.am index 9194d99ec..e436cc764 100644 --- a/grc/blocks/Makefile.am +++ b/grc/blocks/Makefile.am @@ -230,6 +230,7 @@ dist_ourdata_DATA = \ wxgui_histosink2.xml \ wxgui_numbersink2.xml \ wxgui_scopesink2.xml \ + wxgui_termsink.xml \ wxgui_waterfallsink2.xml \ xmlrpc_client.xml \ xmlrpc_server.xml diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml index ffa52a1e7..fc074cb69 100644 --- a/grc/blocks/block_tree.xml +++ b/grc/blocks/block_tree.xml @@ -46,6 +46,7 @@ <block>wxgui_constellationsink2</block> <block>wxgui_waterfallsink2</block> <block>wxgui_histosink2</block> + <block>wxgui_termsink</block> </cat> <cat> <name>Operators</name> diff --git a/grc/blocks/wxgui_termsink.xml b/grc/blocks/wxgui_termsink.xml new file mode 100644 index 000000000..985d89b58 --- /dev/null +++ b/grc/blocks/wxgui_termsink.xml @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<!-- +################################################### +##Terminal window +################################################### + --> +<block> + <name>Terminal Sink</name> + <key>wxgui_termsink</key> + + <import>from gnuradio.wxgui import termsink</import> + + <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +termsink.termsink( + parent=$(parent).GetWin(), +#if $win_size() + size=$win_size, +#end if + msgq=$(id)_msgq_in, +) +#if not $grid_pos() +$(parent).Add(self.$(id)) +#else +$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos())))) +#end if</make> + + <param> + <name>Window Size</name> + <key>win_size</key> + <value></value> + <type>int_vector</type> + <hide>#if $win_size() then 'none' else 'part'#</hide> + </param> + <param> + <name>Grid Position</name> + <key>grid_pos</key> + <value></value> + <type>grid_pos</type> + </param> + + <param> + <name>Notebook</name> + <key>notebook</key> + <value></value> + <type>notebook</type> + </param> + + <check>not $win_size or len($win_size) == 2</check> + + <sink> + <name>in</name> + <type>msg</type> + </sink> + +</block> |