summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-wxgui/src/python/Makefile.am13
-rw-r--r--gr-wxgui/src/python/termsink.py77
-rw-r--r--grc/blocks/Makefile.am1
-rw-r--r--grc/blocks/block_tree.xml1
-rw-r--r--grc/blocks/wxgui_termsink.xml55
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>