Merge branch 'wip/term' of git@gnuradio.org:jcorgan
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Tue, 3 Nov 2009 15:15:14 +0000 (07:15 -0800)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Tue, 3 Nov 2009 15:15:14 +0000 (07:15 -0800)
* 'wip/term' of git@gnuradio.org:jcorgan:
  gr-wxgui: cleanup for merge
  Consolidated termsink into one class
  Basic terminal window that takes raw text on input msgq and appends it
  Add placeholder panel for console, use old style window size
  Created skeleton wxgui term window component

gr-wxgui/src/python/Makefile.am
gr-wxgui/src/python/termsink.py [new file with mode: 0644]
grc/blocks/Makefile.am
grc/blocks/block_tree.xml
grc/blocks/wxgui_termsink.xml [new file with mode: 0644]

index e06298a2d081b93ae561e93b421df0124e2b2e40..2382d599c0b9a96d72f1506640f9afa14f0e47d9 100644 (file)
@@ -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 (file)
index 0000000..a0cfd57
--- /dev/null
@@ -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)
index 9194d99ec2a79734ff2cd0ac2152f5ef615dd1c0..e436cc7645e970708505ba4c8d8db2173a2f4580 100644 (file)
@@ -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
index ffa52a1e7ae6b4d43fc39327a07bc44fb5ee366f..fc074cb69101e0577bf4e84b060a2ef008baf7dc 100644 (file)
@@ -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 (file)
index 0000000..985d89b
--- /dev/null
@@ -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>