summaryrefslogtreecommitdiff
path: root/gr-wxgui/grc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-wxgui/grc')
-rw-r--r--gr-wxgui/grc/.gitignore2
-rw-r--r--gr-wxgui/grc/Makefile.am45
-rw-r--r--gr-wxgui/grc/__init__.py22
-rw-r--r--gr-wxgui/grc/notebook.xml70
-rw-r--r--gr-wxgui/grc/panel.py49
-rw-r--r--gr-wxgui/grc/top_block_gui.py74
-rw-r--r--gr-wxgui/grc/variable_check_box.xml85
-rw-r--r--gr-wxgui/grc/variable_chooser.xml123
-rw-r--r--gr-wxgui/grc/variable_slider.xml139
-rw-r--r--gr-wxgui/grc/variable_static_text.xml98
-rw-r--r--gr-wxgui/grc/variable_text_box.xml102
-rw-r--r--gr-wxgui/grc/wxgui_constellationsink2.xml140
-rw-r--r--gr-wxgui/grc/wxgui_fftsink2.xml233
-rw-r--r--gr-wxgui/grc/wxgui_histosink2.xml78
-rw-r--r--gr-wxgui/grc/wxgui_numbersink2.xml193
-rw-r--r--gr-wxgui/grc/wxgui_scopesink2.xml187
-rw-r--r--gr-wxgui/grc/wxgui_termsink.xml56
-rw-r--r--gr-wxgui/grc/wxgui_waterfallsink2.xml190
18 files changed, 1886 insertions, 0 deletions
diff --git a/gr-wxgui/grc/.gitignore b/gr-wxgui/grc/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-wxgui/grc/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-wxgui/grc/Makefile.am b/gr-wxgui/grc/Makefile.am
new file mode 100644
index 000000000..d8c7b3471
--- /dev/null
+++ b/gr-wxgui/grc/Makefile.am
@@ -0,0 +1,45 @@
+#
+# Copyright 2011 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
+
+grcblocksdir = $(grc_blocksdir)
+dist_grcblocks_DATA = \
+ notebook.xml \
+ variable_check_box.xml \
+ variable_chooser.xml \
+ variable_slider.xml \
+ variable_static_text.xml \
+ variable_text_box.xml \
+ wxgui_constellationsink2.xml \
+ wxgui_fftsink2.xml \
+ wxgui_histosink2.xml \
+ wxgui_numbersink2.xml \
+ wxgui_scopesink2.xml \
+ wxgui_termsink.xml \
+ wxgui_waterfallsink2.xml
+
+#The wxgui module contains a top_block + wxgui frame.
+wxgui_pythondir = $(pythondir)/grc_gnuradio/wxgui
+wxgui_python_PYTHON = \
+ __init__.py \
+ panel.py \
+ top_block_gui.py
diff --git a/gr-wxgui/grc/__init__.py b/gr-wxgui/grc/__init__.py
new file mode 100644
index 000000000..81427253b
--- /dev/null
+++ b/gr-wxgui/grc/__init__.py
@@ -0,0 +1,22 @@
+# Copyright 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.
+#
+
+from top_block_gui import top_block_gui
+from panel import Panel
diff --git a/gr-wxgui/grc/notebook.xml b/gr-wxgui/grc/notebook.xml
new file mode 100644
index 000000000..bb3de51cb
--- /dev/null
+++ b/gr-wxgui/grc/notebook.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##WX GUI Notebook
+###################################################
+ -->
+<block>
+ <name>WX GUI Notebook</name>
+ <key>notebook</key>
+ <category>WX GUI Widgets</category>
+ <import>from grc_gnuradio import wxgui as grc_wxgui</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+self.$(id) = wx.Notebook($(parent).GetWin(), style=$style)
+#for $label in $labels()
+self.$(id).AddPage(grc_wxgui.Panel(self.$(id)), "$label")
+#end for
+#if not $grid_pos()
+$(parent).Add(self.$(id))
+#else
+$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <param>
+ <name>Tab Orientation</name>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
+ <type>enum</type>
+ <option>
+ <name>Top</name>
+ <key>wx.NB_TOP</key>
+ </option>
+ <option>
+ <name>Right</name>
+ <key>wx.NB_RIGHT</key>
+ </option>
+ <option>
+ <name>Bottom</name>
+ <key>wx.NB_BOTTOM</key>
+ </option>
+ <option>
+ <name>Left</name>
+ <key>wx.NB_LEFT</key>
+ </option>
+ </param>
+ <param>
+ <name>Labels</name>
+ <key>labels</key>
+ <value>['tab1', 'tab2', 'tab3']</value>
+ <type>raw</type>
+ </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>isinstance($labels, (list, tuple))</check>
+ <check>all(map(lambda x: isinstance(x, str), $labels))</check>
+ <check>len($labels) &gt; 0</check>
+ <doc>
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/panel.py b/gr-wxgui/grc/panel.py
new file mode 100644
index 000000000..e62133cac
--- /dev/null
+++ b/gr-wxgui/grc/panel.py
@@ -0,0 +1,49 @@
+# 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.
+#
+
+import wx
+
+class Panel(wx.Panel):
+ def __init__(self, parent, orient=wx.VERTICAL):
+ wx.Panel.__init__(self, parent)
+ self._box = wx.BoxSizer(orient)
+ self._grid = wx.GridBagSizer(5, 5)
+ self.Add(self._grid)
+ self.SetSizer(self._box)
+
+ def GetWin(self): return self
+
+ def Add(self, win):
+ """
+ Add a window to the wx vbox.
+ @param win the wx window
+ """
+ self._box.Add(win, 0, wx.EXPAND)
+
+ def GridAdd(self, win, row, col, row_span=1, col_span=1):
+ """
+ Add a window to the wx grid at the given position.
+ @param win the wx window
+ @param row the row specification (integer >= 0)
+ @param col the column specification (integer >= 0)
+ @param row_span the row span specification (integer >= 1)
+ @param col_span the column span specification (integer >= 1)
+ """
+ self._grid.Add(win, wx.GBPosition(row, col), wx.GBSpan(row_span, col_span), wx.EXPAND)
diff --git a/gr-wxgui/grc/top_block_gui.py b/gr-wxgui/grc/top_block_gui.py
new file mode 100644
index 000000000..333ccf1c1
--- /dev/null
+++ b/gr-wxgui/grc/top_block_gui.py
@@ -0,0 +1,74 @@
+# Copyright 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.
+#
+
+import wx
+from gnuradio import gr
+import panel
+
+default_gui_size = (200, 100)
+
+class top_block_gui(gr.top_block):
+ """gr top block with wx gui app and grid sizer."""
+
+ def __init__(self, title='', size=default_gui_size):
+ """
+ Initialize the gr top block.
+ Create the wx gui elements.
+ @param title the main window title
+ @param size the main window size tuple in pixels
+ @param icon the file path to an icon or None
+ """
+ #initialize
+ gr.top_block.__init__(self)
+ self._size = size
+ #create gui elements
+ self._app = wx.App()
+ self._frame = wx.Frame(None, title=title)
+ self._panel = panel.Panel(self._frame)
+ self.Add = self._panel.Add
+ self.GridAdd = self._panel.GridAdd
+ self.GetWin = self._panel.GetWin
+
+ def SetIcon(self, *args, **kwargs): self._frame.SetIcon(*args, **kwargs)
+
+ def Run(self, start=True):
+ """
+ Setup the wx gui elements.
+ Start the gr top block.
+ Block with the wx main loop.
+ """
+ #set minimal window size
+ self._frame.SetSizeHints(*self._size)
+ #create callback for quit
+ def _quit(event):
+ self.stop(); self.wait()
+ self._frame.Destroy()
+ #setup app
+ self._frame.Bind(wx.EVT_CLOSE, _quit)
+ self._sizer = wx.BoxSizer(wx.VERTICAL)
+ self._sizer.Add(self._panel, 0, wx.EXPAND)
+ self._frame.SetSizerAndFit(self._sizer)
+ self._frame.SetAutoLayout(True)
+ self._frame.Show(True)
+ self._app.SetTopWindow(self._frame)
+ #start flow graph
+ if start: self.start()
+ #blocking main loop
+ self._app.MainLoop()
diff --git a/gr-wxgui/grc/variable_check_box.xml b/gr-wxgui/grc/variable_check_box.xml
new file mode 100644
index 000000000..0c7bd1081
--- /dev/null
+++ b/gr-wxgui/grc/variable_check_box.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Variable Check Box:
+## a gui check box form
+###################################################
+ -->
+<block>
+ <name>WX GUI Check Box</name>
+ <key>variable_check_box</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import forms</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+#set $win = 'self._%s_check_box'%$id
+$win = forms.check_box(
+ parent=$(parent).GetWin(),
+ value=self.$id,
+ callback=self.set_$(id),
+ #if $label()
+ label=$label,
+ #else
+ label='$id',
+ #end if
+ true=$true,
+ false=$false,
+)
+#if not $grid_pos()
+$(parent).Add($win)
+#else
+$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>self.set_$(id)($value)</callback>
+ <callback>self._$(id)_check_box.set_value($id)</callback>
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>True</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>True</name>
+ <key>true</key>
+ <value>True</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>False</name>
+ <key>false</key>
+ <value>False</value>
+ <type>raw</type>
+ </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>$value in ($true, $false)</check>
+ <doc>
+This block creates a variable with a check box form. \
+Leave the label blank to use the variable id as the label.
+
+A check box form can switch between two states; \
+the default being True and False. \
+Override True and False to use alternative states.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/variable_chooser.xml b/gr-wxgui/grc/variable_chooser.xml
new file mode 100644
index 000000000..e16e88c5d
--- /dev/null
+++ b/gr-wxgui/grc/variable_chooser.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Variable Chooser:
+## a gui form with enumerated choices
+## radio buttons, drop down, or button
+###################################################
+ -->
+<block>
+ <name>WX GUI Chooser</name>
+ <key>variable_chooser</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import forms</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+#set $win = 'self._%s_chooser'%$id
+$win = forms.$(type)(
+ parent=$(parent).GetWin(),
+ value=self.$id,
+ callback=self.set_$(id),
+ #if $label()
+ label=$label,
+ #else
+ label='$id',
+ #end if
+ choices=$choices,
+ labels=$labels,
+#if $type() == 'radio_buttons'
+ style=$style,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add($win)
+#else
+$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>self.set_$(id)($value)</callback>
+ <callback>self._$(id)_chooser.set_value($id)</callback>
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>1</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Choices</name>
+ <key>choices</key>
+ <value>[1, 2, 3]</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Labels</name>
+ <key>labels</key>
+ <value>[]</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>drop_down</value>
+ <type>enum</type>
+ <option>
+ <name>Drop Down</name>
+ <key>drop_down</key>
+ </option>
+ <option>
+ <name>Radio Buttons</name>
+ <key>radio_buttons</key>
+ </option>
+ <option>
+ <name>Button</name>
+ <key>button</key>
+ </option>
+ </param>
+ <param>
+ <name>Style</name>
+ <key>style</key>
+ <value>wx.RA_HORIZONTAL</value>
+ <type>enum</type>
+ <hide>#if $type() == 'radio_buttons' then 'part' else 'all'#</hide>
+ <option>
+ <name>Horizontal</name>
+ <key>wx.RA_HORIZONTAL</key>
+ </option>
+ <option>
+ <name>Vertical</name>
+ <key>wx.RA_VERTICAL</key>
+ </option>
+ </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>$value in $choices</check>
+ <check>not $labels or len($labels) == len($choices)</check>
+ <doc>
+This block creates a variable with a drop down, radio buttons, or a button. \
+Leave the label blank to use the variable id as the label. \
+The value index is the index of a particular choice, \
+which defines the default choice when the flow graph starts. \
+The choices must be a list of possible values. \
+Leave labels empty to use the choices as the labels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/variable_slider.xml b/gr-wxgui/grc/variable_slider.xml
new file mode 100644
index 000000000..5e3c175aa
--- /dev/null
+++ b/gr-wxgui/grc/variable_slider.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Variable Slider:
+## a combined slider and text box form
+###################################################
+ -->
+<block>
+ <name>WX GUI Slider</name>
+ <key>variable_slider</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import forms</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+#set $win = '_%s_sizer'%$id
+$win = wx.BoxSizer(wx.VERTICAL)
+self._$(id)_text_box = forms.text_box(
+ parent=$(parent).GetWin(),
+ sizer=$win,
+ value=self.$id,
+ callback=self.set_$(id),
+ #if $label()
+ label=$label,
+ #else
+ label='$id',
+ #end if
+ converter=forms.$(converver)(),
+ proportion=0,
+)
+self._$(id)_slider = forms.slider(
+ parent=$(parent).GetWin(),
+ sizer=$win,
+ value=self.$id,
+ callback=self.set_$(id),
+ minimum=$min,
+ maximum=$max,
+ num_steps=$num_steps,
+ style=$style,
+ cast=$(converver.slider_cast),
+ proportion=1,
+)
+#if not $grid_pos()
+$(parent).Add($win)
+#else
+$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>self.set_$(id)($value)</callback>
+ <callback>self._$(id)_slider.set_value($id)</callback>
+ <callback>self._$(id)_text_box.set_value($id)</callback>
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>50</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Minimum</name>
+ <key>min</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Maximum</name>
+ <key>max</key>
+ <value>100</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Num Steps</name>
+ <key>num_steps</key>
+ <value>100</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>Style</name>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Horizontal</name>
+ <key>wx.SL_HORIZONTAL</key>
+ </option>
+ <option>
+ <name>Vertical</name>
+ <key>wx.SL_VERTICAL</key>
+ </option>
+ </param>
+ <param>
+ <name>Converter</name>
+ <key>converver</key>
+ <value>float_converter</value>
+ <type>enum</type>
+ <option>
+ <name>Float</name>
+ <key>float_converter</key>
+ <opt>slider_cast:float</opt>
+ </option>
+ <option>
+ <name>Integer</name>
+ <key>int_converter</key>
+ <opt>slider_cast:int</opt>
+ </option>
+ </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>$min &lt;= $value &lt;= $max</check>
+ <check>$min &lt; $max</check>
+ <check>0 &lt; $num_steps &lt;= 1000</check>
+ <doc>
+This block creates a variable with a slider. \
+Leave the label blank to use the variable id as the label. \
+The value must be a real number. \
+The value must be between the minimum and the maximum. \
+The number of steps must be between 0 and 1000.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/variable_static_text.xml b/gr-wxgui/grc/variable_static_text.xml
new file mode 100644
index 000000000..cd122e76a
--- /dev/null
+++ b/gr-wxgui/grc/variable_static_text.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Variable Static Text:
+## a gui static text form
+###################################################
+ -->
+<block>
+ <name>WX GUI Static Text</name>
+ <key>variable_static_text</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import forms</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+#set $win = 'self._%s_static_text'%$id
+$win = forms.static_text(
+ parent=$(parent).GetWin(),
+ value=self.$id,
+ callback=self.set_$(id),
+ #if $label()
+ label=$label,
+ #else
+ label='$id',
+ #end if
+ #if $formatter()
+ converter=forms.$(converver)(formatter=$formatter),
+ #else
+ converter=forms.$(converver)(),
+ #end if
+)
+#if not $grid_pos()
+$(parent).Add($win)
+#else
+$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>self.set_$(id)($value)</callback>
+ <callback>self._$(id)_static_text.set_value($id)</callback>
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>0</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Converter</name>
+ <key>converver</key>
+ <value>float_converter</value>
+ <type>enum</type>
+ <option>
+ <name>Float</name>
+ <key>float_converter</key>
+ </option>
+ <option>
+ <name>Integer</name>
+ <key>int_converter</key>
+ </option>
+ <option>
+ <name>String</name>
+ <key>str_converter</key>
+ </option>
+ </param>
+ <param>
+ <name>Formatter</name>
+ <key>formatter</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>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>
+ <doc>
+This block creates a variable with a static text form. \
+Leave the label blank to use the variable id as the label.
+
+Format should be a function/lambda that converts a value into a string or None for the default formatter.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/variable_text_box.xml b/gr-wxgui/grc/variable_text_box.xml
new file mode 100644
index 000000000..afff839cf
--- /dev/null
+++ b/gr-wxgui/grc/variable_text_box.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Variable Text Box:
+## a gui text box form
+###################################################
+ -->
+<block>
+ <name>WX GUI Text Box</name>
+ <key>variable_text_box</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import forms</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+#set $win = 'self._%s_text_box'%$id
+$win = forms.text_box(
+ parent=$(parent).GetWin(),
+ value=self.$id,
+ callback=self.set_$(id),
+ #if $label()
+ label=$label,
+ #else
+ label='$id',
+ #end if
+ #if $formatter()
+ converter=forms.$(converver)(formatter=$formatter),
+ #else
+ converter=forms.$(converver)(),
+ #end if
+)
+#if not $grid_pos()
+$(parent).Add($win)
+#else
+$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>self.set_$(id)($value)</callback>
+ <callback>self._$(id)_text_box.set_value($id)</callback>
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>0</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Converter</name>
+ <key>converver</key>
+ <value>float_converter</value>
+ <type>enum</type>
+ <option>
+ <name>Float</name>
+ <key>float_converter</key>
+ </option>
+ <option>
+ <name>Integer</name>
+ <key>int_converter</key>
+ </option>
+ <option>
+ <name>String</name>
+ <key>str_converter</key>
+ </option>
+ <option>
+ <name>Evaluate</name>
+ <key>eval_converter</key>
+ </option>
+ </param>
+ <param>
+ <name>Formatter</name>
+ <key>formatter</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>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>
+ <doc>
+This block creates a variable with a text box. \
+Leave the label blank to use the variable id as the label.
+
+Format should be a function/lambda that converts a value into a string or None for the default formatter.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_constellationsink2.xml b/gr-wxgui/grc/wxgui_constellationsink2.xml
new file mode 100644
index 000000000..c200790f9
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_constellationsink2.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Constellation Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI Constellation Sink</name>
+ <key>wxgui_constellationsink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import constsink_gl</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+constsink_gl.const_sink_c(
+ $(parent).GetWin(),
+ title=$title,
+ sample_rate=$samp_rate,
+ frame_rate=$frame_rate,
+ const_size=$const_size,
+ M=$M,
+ theta=$theta,
+ alpha=$alpha,
+ fmax=$fmax,
+ mu=$mu,
+ gain_mu=$gain_mu,
+ symbol_rate=$symbol_rate,
+ omega_limit=$omega_limit,
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>set_sample_rate($samp_rate)</callback>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>Constellation Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Frame Rate</name>
+ <key>frame_rate</key>
+ <value>5</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Constellation Size</name>
+ <key>const_size</key>
+ <value>2048</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>M</name>
+ <key>M</key>
+ <value>4</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Theta</name>
+ <key>theta</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Alpha</name>
+ <key>alpha</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Max Freq</name>
+ <key>fmax</key>
+ <value>0.06</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Mu</name>
+ <key>mu</key>
+ <value>0.5</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain Mu</name>
+ <key>gain_mu</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Symbol Rate</name>
+ <key>symbol_rate</key>
+ <value>samp_rate/4.</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Omega Limit</name>
+ <key>omega_limit</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <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>complex</type>
+ </sink>
+ <doc>
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_fftsink2.xml b/gr-wxgui/grc/wxgui_fftsink2.xml
new file mode 100644
index 000000000..9b35ab848
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_fftsink2.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##FFT Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI FFT Sink</name>
+ <key>wxgui_fftsink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio import window</import>
+ <import>from gnuradio.wxgui import fftsink2</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+fftsink2.$(type.fcn)(
+ $(parent).GetWin(),
+ baseband_freq=$baseband_freq,
+ y_per_div=$y_per_div,
+ y_divs=$y_divs,
+ ref_level=$ref_level,
+ ref_scale=$ref_scale,
+ sample_rate=$samp_rate,
+ fft_size=$fft_size,
+ fft_rate=$fft_rate,
+ average=$average,
+ avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
+ title=$title,
+ peak_hold=$peak_hold,
+#if $win()
+ win=$win,
+#end if
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>set_baseband_freq($baseband_freq)</callback>
+ <callback>set_sample_rate($samp_rate)</callback>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>fcn:fft_sink_c</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:fft_sink_f</opt>
+ </option>
+ </param>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>FFT Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Baseband Freq</name>
+ <key>baseband_freq</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Y per Div</name>
+ <key>y_per_div</key>
+ <value>10</value>
+ <type>enum</type>
+ <option>
+ <name>1 dB</name>
+ <key>1</key>
+ </option>
+ <option>
+ <name>2 dB</name>
+ <key>2</key>
+ </option>
+ <option>
+ <name>5 dB</name>
+ <key>5</key>
+ </option>
+ <option>
+ <name>10 dB</name>
+ <key>10</key>
+ </option>
+ <option>
+ <name>20 dB</name>
+ <key>20</key>
+ </option>
+ </param>
+ <param>
+ <name>Y Divs</name>
+ <key>y_divs</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Ref Level (dB)</name>
+ <key>ref_level</key>
+ <value>50</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Ref Scale (p2p)</name>
+ <key>ref_scale</key>
+ <value>2.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>FFT Size</name>
+ <key>fft_size</key>
+ <value>1024</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Refresh Rate</name>
+ <key>fft_rate</key>
+ <value>30</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Peak Hold</name>
+ <key>peak_hold</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Average</name>
+ <key>average</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Average Alpha</name>
+ <key>avg_alpha</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
+ </param>
+ <param>
+ <name>Window</name>
+ <key>win</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>#if $win() is None then 'part' else 'none'#</hide>
+ <option>
+ <name>Automatic</name>
+ <key>None</key>
+ </option>
+ <option>
+ <name>Blackman-Harris</name>
+ <key>window.blackmanharris</key>
+ </option>
+ <option>
+ <name>Hamming</name>
+ <key>window.hamming</key>
+ </option>
+ <option>
+ <name>Hanning</name>
+ <key>window.hanning</key>
+ </option>
+ <option>
+ <name>Rectangular</name>
+ <key>window.rectangular</key>
+ </option>
+ <option>
+ <name>Flattop</name>
+ <key>window.flattop</key>
+ </option>
+ </param>
+ <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>$type</type>
+ </sink>
+ <doc>
+Set Average Alpha to 0 for automatic setting.
+
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_histosink2.xml b/gr-wxgui/grc/wxgui_histosink2.xml
new file mode 100644
index 000000000..f4f6a2959
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_histosink2.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Histogram Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI Histo Sink</name>
+ <key>wxgui_histosink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import histosink_gl</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+histosink_gl.histo_sink_f(
+ $(parent).GetWin(),
+ title=$title,
+ num_bins=$num_bins,
+ frame_size=$frame_size,
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>set_num_bins($num_bins)</callback>
+ <callback>set_frame_size($frame_size)</callback>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>Histogram Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Num Bins</name>
+ <key>num_bins</key>
+ <value>27</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Frame Size</name>
+ <key>frame_size</key>
+ <value>1000</value>
+ <type>int</type>
+ </param>
+ <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>float</type>
+ </sink>
+ <doc>
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_numbersink2.xml b/gr-wxgui/grc/wxgui_numbersink2.xml
new file mode 100644
index 000000000..255926610
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_numbersink2.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Number Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI Number Sink</name>
+ <key>wxgui_numbersink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import numbersink2</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+numbersink2.$(type.fcn)(
+ $(parent).GetWin(),
+ unit=$units,
+ minval=$min_value,
+ maxval=$max_value,
+ factor=$factor,
+ decimal_places=$decimal_places,
+ ref_level=$ref_level,
+ sample_rate=$samp_rate,
+ number_rate=$number_rate,
+ average=$average,
+ avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
+ label=$title,
+ peak_hold=$peak_hold,
+ show_gauge=$show_gauge,
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>fcn:number_sink_c</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:number_sink_f</opt>
+ </option>
+ </param>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>Number Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Units</name>
+ <key>units</key>
+ <value>Units</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Min Value</name>
+ <key>min_value</key>
+ <value>-100</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Max Value</name>
+ <key>max_value</key>
+ <value>100</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Factor</name>
+ <key>factor</key>
+ <value>1.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Decimal Places</name>
+ <key>decimal_places</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Reference Level</name>
+ <key>ref_level</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Number Rate</name>
+ <key>number_rate</key>
+ <value>15</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Peak Hold</name>
+ <key>peak_hold</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Average</name>
+ <key>average</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Average Alpha</name>
+ <key>avg_alpha</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
+ </param>
+ <param>
+ <name>Show Gauge</name>
+ <key>show_gauge</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Show</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Hide</name>
+ <key>False</key>
+ </option>
+ </param>
+ <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>$type</type>
+ </sink>
+ <doc>
+Set Average Alpha to 0 for automatic setting.
+
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+
+Incoming numbers are multiplied by the factor, and then added-to by the reference level.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_scopesink2.xml b/gr-wxgui/grc/wxgui_scopesink2.xml
new file mode 100644
index 000000000..dbf983e11
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_scopesink2.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Scope Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI Scope Sink</name>
+ <key>wxgui_scopesink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio.wxgui import scopesink2</import>
+ <import>from gnuradio import gr</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+scopesink2.$(type.fcn)(
+ $(parent).GetWin(),
+ title=$title,
+ sample_rate=$samp_rate,
+ v_scale=$v_scale,
+ v_offset=$v_offset,
+ t_scale=$t_scale,
+ ac_couple=$ac_couple,
+ xy_mode=$xy_mode,
+ num_inputs=$num_inputs,
+ trig_mode=$trig_mode,
+ y_axis_label=$y_axis_label,
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>set_sample_rate($samp_rate)</callback>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>fcn:scope_sink_c</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:scope_sink_f</opt>
+ </option>
+ </param>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>Scope Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>V Scale</name>
+ <key>v_scale</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $v_scale() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>V Offset</name>
+ <key>v_offset</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $v_offset() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>T Scale</name>
+ <key>t_scale</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $t_scale() then 'none' else 'part'#</hide>
+ </param>
+ <param>
+ <name>AC Couple</name>
+ <key>ac_couple</key>
+ <value>False</value>
+ <type>bool</type>
+ <hide>#if $ac_couple() then 'none' else 'part'#</hide>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ </param>
+ <param>
+ <name>XY Mode</name>
+ <key>xy_mode</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>#if $xy_mode() == 'True' then 'none' else 'part'#</hide>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ </param>
+ <param>
+ <name>Num Inputs</name>
+ <key>num_inputs</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+ <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>
+ <param>
+ <name>Trigger Mode</name>
+ <key>trig_mode</key>
+ <type>enum</type>
+ <option>
+ <name>Auto</name>
+ <key>gr.gr_TRIG_MODE_AUTO</key>
+ </option>
+ <option>
+ <name>Normal</name>
+ <key>gr.gr_TRIG_MODE_NORM</key>
+ </option>
+ <option>
+ <name>Freerun</name>
+ <key>gr.gr_TRIG_MODE_FREE</key>
+ </option>
+ <option>
+ <name>Stripchart</name>
+ <key>gr.gr_TRIG_MODE_STRIPCHART</key>
+ </option>
+ </param>
+ <param>
+ <name>Y Axis Label</name>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ <type>string</type>
+ </param>
+ <check>not $win_size or len($win_size) == 2</check>
+ <check>not $xy_mode or '$type' == 'complex' or $num_inputs != 1</check>
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <nports>$num_inputs</nports>
+ </sink>
+ <doc>
+Set the V Scale to 0 for the scope to auto-scale.
+
+Set the T Scale to 0 for automatic setting.
+
+XY Mode allows the scope to initialize as an XY plotter.
+
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>
diff --git a/gr-wxgui/grc/wxgui_termsink.xml b/gr-wxgui/grc/wxgui_termsink.xml
new file mode 100644
index 000000000..3e35c7578
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_termsink.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Terminal window
+###################################################
+ -->
+<block>
+ <name>WX GUI Terminal Sink</name>
+ <key>wxgui_termsink</key>
+ <category>WX GUI Widgets</category>
+
+ <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>
diff --git a/gr-wxgui/grc/wxgui_waterfallsink2.xml b/gr-wxgui/grc/wxgui_waterfallsink2.xml
new file mode 100644
index 000000000..7c646c3b2
--- /dev/null
+++ b/gr-wxgui/grc/wxgui_waterfallsink2.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Waterfall Sink
+###################################################
+ -->
+<block>
+ <name>WX GUI Waterfall Sink</name>
+ <key>wxgui_waterfallsink2</key>
+ <category>WX GUI Widgets</category>
+ <import>from gnuradio import window</import>
+ <import>from gnuradio.wxgui import waterfallsink2</import>
+ <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
+waterfallsink2.$(type.fcn)(
+ $(parent).GetWin(),
+ baseband_freq=$baseband_freq,
+ dynamic_range=$dynamic_range,
+ ref_level=$ref_level,
+ ref_scale=$ref_scale,
+ sample_rate=$samp_rate,
+ fft_size=$fft_size,
+ fft_rate=$fft_rate,
+ average=$average,
+ avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
+ title=$title,
+#if $win()
+ win=$win,
+#end if
+#if $win_size()
+ size=$win_size,
+#end if
+)
+#if not $grid_pos()
+$(parent).Add(self.$(id).win)
+#else
+$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
+#end if</make>
+ <callback>set_baseband_freq($baseband_freq)</callback>
+ <callback>set_sample_rate($samp_rate)</callback>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>fcn:waterfall_sink_c</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:waterfall_sink_f</opt>
+ </option>
+ </param>
+ <param>
+ <name>Title</name>
+ <key>title</key>
+ <value>Waterfall Plot</value>
+ <type>string</type>
+ </param>
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Baseband Freq</name>
+ <key>baseband_freq</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Dynamic Range</name>
+ <key>dynamic_range</key>
+ <value>100</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Reference Level</name>
+ <key>ref_level</key>
+ <value>50</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Ref Scale (p2p)</name>
+ <key>ref_scale</key>
+ <value>2.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>FFT Size</name>
+ <key>fft_size</key>
+ <value>512</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>FFT Rate</name>
+ <key>fft_rate</key>
+ <value>15</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Average</name>
+ <key>average</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Average Alpha</name>
+ <key>avg_alpha</key>
+ <value>0</value>
+ <type>real</type>
+ <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
+ </param>
+ <param>
+ <name>Window</name>
+ <key>win</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>#if $win() is None then 'part' else 'none'#</hide>
+ <option>
+ <name>Automatic</name>
+ <key>None</key>
+ </option>
+ <option>
+ <name>Blackman-Harris</name>
+ <key>window.blackmanharris</key>
+ </option>
+ <option>
+ <name>Hamming</name>
+ <key>window.hamming</key>
+ </option>
+ <option>
+ <name>Hanning</name>
+ <key>window.hanning</key>
+ </option>
+ <option>
+ <name>Rectangular</name>
+ <key>window.rectangular</key>
+ </option>
+ <option>
+ <name>Flattop</name>
+ <key>window.flattop</key>
+ </option>
+ </param>
+ <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>$type</type>
+ </sink>
+ <doc>
+Set Average Alpha to 0 for automatic setting.
+
+Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
+
+Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
+
+Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
+ </doc>
+</block>