diff options
author | Johnathan Corgan <jcorgan@corganenterprises.com> | 2009-11-03 07:15:14 -0800 |
---|---|---|
committer | Johnathan Corgan <jcorgan@corganenterprises.com> | 2009-11-03 07:15:14 -0800 |
commit | 058edee5b4d1423b7ad88a9748bec073ff4963ff (patch) | |
tree | e1b48429dccb13587b04258c4e5c15b8f0660b98 | |
parent | f9c3bfb83af1048db54de941df1898f2ec7fb1fc (diff) | |
parent | 392b7f9002cb08dddc1ca0ced18f899a0958ba1f (diff) |
Merge branch 'wip/term' of git@gnuradio.org:jcorgan
* '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
-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 e06298a2d0..2382d599c0 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 0000000000..a0cfd575d6 --- /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 9194d99ec2..e436cc7645 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 ffa52a1e7a..fc074cb691 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 0000000000..985d89b58e --- /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> |