summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-analog/grc/analog_block_tree.xml2
-rw-r--r--gr-audio/grc/audio_sink.xml2
-rw-r--r--gr-audio/grc/audio_source.xml2
-rw-r--r--gr-blocks/grc/blks2_error_rate.xml2
-rw-r--r--gr-blocks/grc/blks2_selector.xml2
-rw-r--r--gr-blocks/grc/blks2_tcp_sink.xml2
-rw-r--r--gr-blocks/grc/blks2_tcp_source.xml2
-rw-r--r--gr-blocks/grc/blks2_valve.xml2
-rw-r--r--gr-blocks/grc/blocks_block_tree.xml9
-rw-r--r--gr-channels/grc/channels_block_tree.xml2
-rw-r--r--gr-digital/grc/blks2_packet_decoder.xml2
-rw-r--r--gr-digital/grc/blks2_packet_encoder.xml2
-rw-r--r--gr-digital/grc/digital_block_tree.xml2
-rw-r--r--gr-digital/grc/digital_burst_shaper.xml2
-rw-r--r--gr-dtv/grc/dtv_block_tree.xml2
-rw-r--r--gr-fcd/grc/fcd_source_c.xml2
-rw-r--r--gr-fec/grc/fec_block_tree.xml2
-rw-r--r--gr-fft/grc/fft_block_tree.xml2
-rw-r--r--gr-filter/grc/filter_block_tree.xml2
-rw-r--r--gr-noaa/grc/noaa_hrpt_decoder.xml2
-rw-r--r--gr-noaa/grc/noaa_hrpt_deframer.xml2
-rw-r--r--gr-noaa/grc/noaa_hrpt_pll_cf.xml2
-rw-r--r--gr-pager/grc/pager_flex_deinterleave.xml2
-rw-r--r--gr-pager/grc/pager_flex_sync.xml2
-rw-r--r--gr-pager/grc/pager_slicer_fb.xml2
-rw-r--r--gr-qtgui/grc/qtgui_block_tree.xml2
-rw-r--r--gr-trellis/grc/trellis_encoder_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_metrics_x.xml2
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_x.xml2
-rw-r--r--gr-trellis/grc/trellis_pccc_encoder_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_permutation.xml2
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_x.xml2
-rw-r--r--gr-trellis/grc/trellis_sccc_encoder_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_siso_combined_f.xml2
-rw-r--r--gr-trellis/grc/trellis_siso_f.xml2
-rw-r--r--gr-trellis/grc/trellis_viterbi_combined_xx.xml2
-rw-r--r--gr-trellis/grc/trellis_viterbi_x.xml2
-rw-r--r--gr-uhd/grc/uhd_block_tree.xml2
-rw-r--r--gr-video-sdl/grc/video_block_tree.xml2
-rw-r--r--gr-vocoder/grc/vocoder_block_tree.xml2
-rw-r--r--gr-wxgui/grc/notebook.xml2
-rw-r--r--gr-wxgui/grc/variable_check_box.xml2
-rw-r--r--gr-wxgui/grc/variable_chooser.xml2
-rw-r--r--gr-wxgui/grc/variable_slider.xml2
-rw-r--r--gr-wxgui/grc/variable_static_text.xml2
-rw-r--r--gr-wxgui/grc/variable_text_box.xml2
-rw-r--r--gr-wxgui/grc/wxgui_constellationsink2.xml2
-rw-r--r--gr-wxgui/grc/wxgui_fftsink2.xml2
-rw-r--r--gr-wxgui/grc/wxgui_histosink2.xml2
-rw-r--r--gr-wxgui/grc/wxgui_numbersink2.xml2
-rw-r--r--gr-wxgui/grc/wxgui_scopesink2.xml2
-rw-r--r--gr-wxgui/grc/wxgui_termsink.xml2
-rw-r--r--gr-wxgui/grc/wxgui_waterfallsink2.xml2
-rw-r--r--gr-zeromq/grc/zeromq_pub_msg_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_pub_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_pull_msg_source.xml2
-rw-r--r--gr-zeromq/grc/zeromq_pull_source.xml2
-rw-r--r--gr-zeromq/grc/zeromq_push_msg_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_push_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_rep_msg_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_rep_sink.xml2
-rw-r--r--gr-zeromq/grc/zeromq_req_msg_source.xml2
-rw-r--r--gr-zeromq/grc/zeromq_req_source.xml2
-rw-r--r--gr-zeromq/grc/zeromq_sub_msg_source.xml2
-rw-r--r--gr-zeromq/grc/zeromq_sub_source.xml2
-rw-r--r--grc/blocks/block_tree.xml11
-rw-r--r--grc/blocks/epy_block.xml1
-rw-r--r--grc/blocks/epy_module.xml1
-rw-r--r--grc/blocks/options.xml2
-rw-r--r--grc/blocks/variable_struct.xml.py1
-rw-r--r--grc/core/Block.py9
-rw-r--r--grc/core/Constants.py1
-rw-r--r--grc/core/Platform.py82
-rw-r--r--grc/core/utils/odict.py4
-rw-r--r--grc/gui/ActionHandler.py5
-rw-r--r--grc/gui/BlockTreeWindow.py85
78 files changed, 176 insertions, 167 deletions
diff --git a/gr-analog/grc/analog_block_tree.xml b/gr-analog/grc/analog_block_tree.xml
index d08e646663..64ccbdd855 100644
--- a/gr-analog/grc/analog_block_tree.xml
+++ b/gr-analog/grc/analog_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Level Controllers</name>
<block>analog_agc_xx</block>
diff --git a/gr-audio/grc/audio_sink.xml b/gr-audio/grc/audio_sink.xml
index 727767b72e..9181055cd9 100644
--- a/gr-audio/grc/audio_sink.xml
+++ b/gr-audio/grc/audio_sink.xml
@@ -7,7 +7,7 @@
<block>
<name>Audio Sink</name>
<key>audio_sink</key>
- <category>Audio</category>
+ <category>[Core]/Audio</category>
<flags>throttle</flags>
<import>from gnuradio import audio</import>
<make>audio.sink($samp_rate, $device_name, $ok_to_block)</make>
diff --git a/gr-audio/grc/audio_source.xml b/gr-audio/grc/audio_source.xml
index aaa3225e8b..044b14466f 100644
--- a/gr-audio/grc/audio_source.xml
+++ b/gr-audio/grc/audio_source.xml
@@ -7,7 +7,7 @@
<block>
<name>Audio Source</name>
<key>audio_source</key>
- <category>Audio</category>
+ <category>[Core]/Audio</category>
<flags>throttle</flags>
<import>from gnuradio import audio</import>
<make>audio.source($samp_rate, $device_name, $ok_to_block)</make>
diff --git a/gr-blocks/grc/blks2_error_rate.xml b/gr-blocks/grc/blks2_error_rate.xml
index 8be018243f..c71739f914 100644
--- a/gr-blocks/grc/blks2_error_rate.xml
+++ b/gr-blocks/grc/blks2_error_rate.xml
@@ -8,7 +8,7 @@
<block>
<name>Error Rate</name>
<key>blks2_error_rate</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.error_rate(
type=$type,
diff --git a/gr-blocks/grc/blks2_selector.xml b/gr-blocks/grc/blks2_selector.xml
index 580fdd9d8c..3442b2cdb8 100644
--- a/gr-blocks/grc/blks2_selector.xml
+++ b/gr-blocks/grc/blks2_selector.xml
@@ -8,7 +8,7 @@
<block>
<name>Selector</name>
<key>blks2_selector</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.selector(
item_size=$type.size*$vlen,
diff --git a/gr-blocks/grc/blks2_tcp_sink.xml b/gr-blocks/grc/blks2_tcp_sink.xml
index 46b10a7790..2bff7e6d45 100644
--- a/gr-blocks/grc/blks2_tcp_sink.xml
+++ b/gr-blocks/grc/blks2_tcp_sink.xml
@@ -7,7 +7,7 @@
<block>
<name>TCP Sink</name>
<key>blks2_tcp_sink</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.tcp_sink(
itemsize=$type.size*$vlen,
diff --git a/gr-blocks/grc/blks2_tcp_source.xml b/gr-blocks/grc/blks2_tcp_source.xml
index 6a59522f3f..f6cc41015f 100644
--- a/gr-blocks/grc/blks2_tcp_source.xml
+++ b/gr-blocks/grc/blks2_tcp_source.xml
@@ -7,7 +7,7 @@
<block>
<name>TCP Source</name>
<key>blks2_tcp_source</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.tcp_source(
itemsize=$type.size*$vlen,
diff --git a/gr-blocks/grc/blks2_valve.xml b/gr-blocks/grc/blks2_valve.xml
index d879ff655f..c3f25163b2 100644
--- a/gr-blocks/grc/blks2_valve.xml
+++ b/gr-blocks/grc/blks2_valve.xml
@@ -8,7 +8,7 @@
<block>
<name>Valve</name>
<key>blks2_valve</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.valve(item_size=$type.size*$vlen, open=bool($open))</make>
<callback>set_open(bool($open))</callback>
diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml
index bfab41aeb6..a9441a9ffb 100644
--- a/gr-blocks/grc/blocks_block_tree.xml
+++ b/gr-blocks/grc/blocks_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Audio</name>
<block>blocks_wavfile_source</block>
@@ -144,6 +144,8 @@
<block>blocks_null_sink</block>
<block>blocks_copy</block>
<block>blocks_nop</block>
+ <block>xmlrpc_server</block>
+ <block>xmlrpc_client</block>
</cat>
<cat>
<name>Modulators</name>
@@ -230,9 +232,4 @@
<name>Variables</name>
<block>variable_tag_object</block>
</cat>
- <cat>
- <name>Misc</name>
- <block>xmlrpc_server</block>
- <block>xmlrpc_client</block>
- </cat>
</cat>
diff --git a/gr-channels/grc/channels_block_tree.xml b/gr-channels/grc/channels_block_tree.xml
index 383f4b199c..00886e8eed 100644
--- a/gr-channels/grc/channels_block_tree.xml
+++ b/gr-channels/grc/channels_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Channel Models</name>
<block>channels_channel_model</block>
diff --git a/gr-digital/grc/blks2_packet_decoder.xml b/gr-digital/grc/blks2_packet_decoder.xml
index 3b66f0024f..fedb2e74f3 100644
--- a/gr-digital/grc/blks2_packet_decoder.xml
+++ b/gr-digital/grc/blks2_packet_decoder.xml
@@ -7,7 +7,7 @@
<block>
<name>Packet Decoder</name>
<key>blks2_packet_decoder</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<flags>deprecated</flags>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.packet_demod_$(type.fcn)(grc_blks2.packet_decoder(
diff --git a/gr-digital/grc/blks2_packet_encoder.xml b/gr-digital/grc/blks2_packet_encoder.xml
index 75cb5eabf1..d030f6ae22 100644
--- a/gr-digital/grc/blks2_packet_encoder.xml
+++ b/gr-digital/grc/blks2_packet_encoder.xml
@@ -7,7 +7,7 @@
<block>
<name>Packet Encoder</name>
<key>blks2_packet_encoder</key>
- <category>Deprecated</category>
+ <category>[Core]/Deprecated</category>
<flags>deprecated</flags>
<import>from grc_gnuradio import blks2 as grc_blks2</import>
<make>grc_blks2.packet_mod_$(type.fcn)(grc_blks2.packet_encoder(
diff --git a/gr-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml
index 6707a8e4db..9bdf6e993f 100644
--- a/gr-digital/grc/digital_block_tree.xml
+++ b/gr-digital/grc/digital_block_tree.xml
@@ -26,7 +26,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Coding</name>
<block>digital_additive_scrambler_bb</block>
diff --git a/gr-digital/grc/digital_burst_shaper.xml b/gr-digital/grc/digital_burst_shaper.xml
index 5c0bc78d0a..95e1bcbc77 100644
--- a/gr-digital/grc/digital_burst_shaper.xml
+++ b/gr-digital/grc/digital_burst_shaper.xml
@@ -2,7 +2,7 @@
<block>
<name>Burst Shaper</name>
<key>digital_burst_shaper_xx</key>
- <category>Packet Operators</category>
+ <category>[Core]/Packet Operators</category>
<import>from gnuradio import digital</import>
<make>digital.burst_shaper_$(type.fcn)($window, $pre_padding, $post_padding, $insert_phasing, $length_tag_name)</make>
<param>
diff --git a/gr-dtv/grc/dtv_block_tree.xml b/gr-dtv/grc/dtv_block_tree.xml
index fba33852c0..8dcbd18127 100644
--- a/gr-dtv/grc/dtv_block_tree.xml
+++ b/gr-dtv/grc/dtv_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Digital Television</name>
<cat>
diff --git a/gr-fcd/grc/fcd_source_c.xml b/gr-fcd/grc/fcd_source_c.xml
index 01ea26d81c..b8975e4070 100644
--- a/gr-fcd/grc/fcd_source_c.xml
+++ b/gr-fcd/grc/fcd_source_c.xml
@@ -2,7 +2,7 @@
<block>
<name>Funcube Dongle Source</name>
<key>fcd_source_c</key>
- <category>FCD</category>
+ <category>[Core]/FCD</category>
<flags>throttle</flags>
<import>from gnuradio import fcd</import>
<make>fcd.source_c($device_name)
diff --git a/gr-fec/grc/fec_block_tree.xml b/gr-fec/grc/fec_block_tree.xml
index 5efc144cbd..b1535e3c42 100644
--- a/gr-fec/grc/fec_block_tree.xml
+++ b/gr-fec/grc/fec_block_tree.xml
@@ -5,7 +5,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Error Coding</name>
<cat>
diff --git a/gr-fft/grc/fft_block_tree.xml b/gr-fft/grc/fft_block_tree.xml
index 7028ed1049..e844d837b4 100644
--- a/gr-fft/grc/fft_block_tree.xml
+++ b/gr-fft/grc/fft_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name> <!-- Blank for Root Name -->
<cat>
<name>Fourier Analysis</name>
<block>fft_vxx</block>
diff --git a/gr-filter/grc/filter_block_tree.xml b/gr-filter/grc/filter_block_tree.xml
index ea869a75bd..3613df8202 100644
--- a/gr-filter/grc/filter_block_tree.xml
+++ b/gr-filter/grc/filter_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Filters</name>
<!-- FIR filter tap generators -->
diff --git a/gr-noaa/grc/noaa_hrpt_decoder.xml b/gr-noaa/grc/noaa_hrpt_decoder.xml
index 2d6e98c531..c5874159f2 100644
--- a/gr-noaa/grc/noaa_hrpt_decoder.xml
+++ b/gr-noaa/grc/noaa_hrpt_decoder.xml
@@ -2,7 +2,7 @@
<block>
<name>HRPT Decoder</name>
<key>noaa_hrpt_decoder</key>
- <category>NOAA</category>
+ <category>[Core]/NOAA</category>
<import>from gnuradio import noaa</import>
<make>noaa.hrpt_decoder($verbose,$output)</make>
diff --git a/gr-noaa/grc/noaa_hrpt_deframer.xml b/gr-noaa/grc/noaa_hrpt_deframer.xml
index af36abf2a2..fbb52f4e44 100644
--- a/gr-noaa/grc/noaa_hrpt_deframer.xml
+++ b/gr-noaa/grc/noaa_hrpt_deframer.xml
@@ -2,7 +2,7 @@
<block>
<name>HRPT Deframer</name>
<key>noaa_hrpt_deframer</key>
- <category>NOAA</category>
+ <category>[Core]/NOAA</category>
<import>from gnuradio import noaa</import>
<make>noaa.hrpt_deframer()</make>
<sink>
diff --git a/gr-noaa/grc/noaa_hrpt_pll_cf.xml b/gr-noaa/grc/noaa_hrpt_pll_cf.xml
index bbe15e8c32..a57d12ed71 100644
--- a/gr-noaa/grc/noaa_hrpt_pll_cf.xml
+++ b/gr-noaa/grc/noaa_hrpt_pll_cf.xml
@@ -2,7 +2,7 @@
<block>
<name>HRPT PLL</name>
<key>noaa_hrpt_pll_cf</key>
- <category>NOAA</category>
+ <category>[Core]/NOAA</category>
<import>from gnuradio import noaa</import>
<make>noaa.hrpt_pll_cf($alpha, $beta, $max_offset)</make>
<callback>set_alpha($alpha)</callback>
diff --git a/gr-pager/grc/pager_flex_deinterleave.xml b/gr-pager/grc/pager_flex_deinterleave.xml
index 14e5782da1..a006023212 100644
--- a/gr-pager/grc/pager_flex_deinterleave.xml
+++ b/gr-pager/grc/pager_flex_deinterleave.xml
@@ -7,7 +7,7 @@
<block>
<name>FLEX Deinterleave</name>
<key>pager_flex_deinterleave</key>
- <category>Pager</category>
+ <category>[Core]/Pager</category>
<import>from gnuradio import pager</import>
<make>pager.flex_deinterleave()</make>
diff --git a/gr-pager/grc/pager_flex_sync.xml b/gr-pager/grc/pager_flex_sync.xml
index ec22321aa5..d37a4fb7a9 100644
--- a/gr-pager/grc/pager_flex_sync.xml
+++ b/gr-pager/grc/pager_flex_sync.xml
@@ -7,7 +7,7 @@
<block>
<name>FLEX Synchronizer</name>
<key>pager_flex_sync</key>
- <category>Pager</category>
+ <category>[Core]/Pager</category>
<import>from gnuradio import pager</import>
<make>pager.flex_sync()</make>
diff --git a/gr-pager/grc/pager_slicer_fb.xml b/gr-pager/grc/pager_slicer_fb.xml
index 25642cb48f..f3e95e0748 100644
--- a/gr-pager/grc/pager_slicer_fb.xml
+++ b/gr-pager/grc/pager_slicer_fb.xml
@@ -7,7 +7,7 @@
<block>
<name>4-Level Slicer/DCR</name>
<key>pager_slicer_fb</key>
- <category>Pager</category>
+ <category>[Core]/Pager</category>
<import>from gnuradio import pager</import>
<make>pager.slicer_fb($alpha)</make>
diff --git a/gr-qtgui/grc/qtgui_block_tree.xml b/gr-qtgui/grc/qtgui_block_tree.xml
index 300c7a786d..33fb12a7b5 100644
--- a/gr-qtgui/grc/qtgui_block_tree.xml
+++ b/gr-qtgui/grc/qtgui_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Instrumentation</name>
<cat>
diff --git a/gr-trellis/grc/trellis_encoder_xx.xml b/gr-trellis/grc/trellis_encoder_xx.xml
index d59903ca2d..ab7d5226e9 100644
--- a/gr-trellis/grc/trellis_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_encoder_xx.xml
@@ -8,7 +8,7 @@
<block>
<name>Trellis Encoder</name>
<key>trellis_encoder_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make> trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state, $blocklength) if $blockwise else trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state) </make>
<callback>set_FSM(trellis.fsm($fsm_args))</callback>
diff --git a/gr-trellis/grc/trellis_metrics_x.xml b/gr-trellis/grc/trellis_metrics_x.xml
index 8bb978f275..15e7338098 100644
--- a/gr-trellis/grc/trellis_metrics_x.xml
+++ b/gr-trellis/grc/trellis_metrics_x.xml
@@ -9,7 +9,7 @@
<block>
<name>Trellis Metrics</name>
<key>trellis_metrics_x</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis, digital</import>
<make>trellis.metrics_$(type)($card, $dim, $table, $metric_type)</make>
<callback>set_O($card)</callback>
diff --git a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
index ff727fbf8b..7bb38db893 100644
--- a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
+++ b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
@@ -9,7 +9,7 @@
<block>
<name>PCCC Decoder Combo</name>
<key>trellis_pccc_decoder_combined_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis, digital</import>
<make>trellis.pccc_decoder_combined_$(type)$(out_type)(
trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
diff --git a/gr-trellis/grc/trellis_pccc_decoder_x.xml b/gr-trellis/grc/trellis_pccc_decoder_x.xml
index 81f4282728..08d1f526af 100644
--- a/gr-trellis/grc/trellis_pccc_decoder_x.xml
+++ b/gr-trellis/grc/trellis_pccc_decoder_x.xml
@@ -9,7 +9,7 @@
<block>
<name>PCCC Decoder</name>
<key>trellis_pccc_decoder_x</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.pccc_decoder_$(out_type)(
trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
diff --git a/gr-trellis/grc/trellis_pccc_encoder_xx.xml b/gr-trellis/grc/trellis_pccc_encoder_xx.xml
index faaa0c1233..85348e6e9b 100644
--- a/gr-trellis/grc/trellis_pccc_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_pccc_encoder_xx.xml
@@ -8,7 +8,7 @@
<block>
<name>PCCC Encoder</name>
<key>trellis_pccc_encoder_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.pccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
<param>
diff --git a/gr-trellis/grc/trellis_permutation.xml b/gr-trellis/grc/trellis_permutation.xml
index 0f118e889f..99eb2d291c 100644
--- a/gr-trellis/grc/trellis_permutation.xml
+++ b/gr-trellis/grc/trellis_permutation.xml
@@ -9,7 +9,7 @@
<block>
<name>Trellis Permutation</name>
<key>trellis_permutation</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.permutation($interleaver_size, $table, $syms_per_block, $type.size*$vlen)</make>
<callback>set_K($interleaver_size)</callback>
diff --git a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
index 4947376d94..79be0b8b5d 100644
--- a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
+++ b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
@@ -9,7 +9,7 @@
<block>
<name>SCCC Decoder Combo</name>
<key>trellis_sccc_decoder_combined_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis, digital</import>
<make>trellis.sccc_decoder_combined_$(type)$(out_type)(
trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
diff --git a/gr-trellis/grc/trellis_sccc_decoder_x.xml b/gr-trellis/grc/trellis_sccc_decoder_x.xml
index 38348cbb51..584ff0b0af 100644
--- a/gr-trellis/grc/trellis_sccc_decoder_x.xml
+++ b/gr-trellis/grc/trellis_sccc_decoder_x.xml
@@ -9,7 +9,7 @@
<block>
<name>SCCC Decoder</name>
<key>trellis_sccc_decoder_x</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.sccc_decoder_$(out_type)(
trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
diff --git a/gr-trellis/grc/trellis_sccc_encoder_xx.xml b/gr-trellis/grc/trellis_sccc_encoder_xx.xml
index a87db79ac2..7b4ab30c75 100644
--- a/gr-trellis/grc/trellis_sccc_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_sccc_encoder_xx.xml
@@ -8,7 +8,7 @@
<block>
<name>SCCC Encoder</name>
<key>trellis_sccc_encoder_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.sccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
<param>
diff --git a/gr-trellis/grc/trellis_siso_combined_f.xml b/gr-trellis/grc/trellis_siso_combined_f.xml
index 542bba6d8b..f8ec9c2d21 100644
--- a/gr-trellis/grc/trellis_siso_combined_f.xml
+++ b/gr-trellis/grc/trellis_siso_combined_f.xml
@@ -9,7 +9,7 @@
<block>
<name>SISO Combo</name>
<key>trellis_siso_combined_f</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.siso_combined_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type, $dim, $table, $metric_type)</make>
<callback>set_FSM(trellis.fsm($fsm_args))</callback>
diff --git a/gr-trellis/grc/trellis_siso_f.xml b/gr-trellis/grc/trellis_siso_f.xml
index 30849d2723..e121643e3f 100644
--- a/gr-trellis/grc/trellis_siso_f.xml
+++ b/gr-trellis/grc/trellis_siso_f.xml
@@ -9,7 +9,7 @@
<block>
<name>SISO</name>
<key>trellis_siso_f</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.siso_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type)</make>
<callback>set_FSM(trellis.fsm($fsm_args))</callback>
diff --git a/gr-trellis/grc/trellis_viterbi_combined_xx.xml b/gr-trellis/grc/trellis_viterbi_combined_xx.xml
index 9c755dc524..a52e5ed2b5 100644
--- a/gr-trellis/grc/trellis_viterbi_combined_xx.xml
+++ b/gr-trellis/grc/trellis_viterbi_combined_xx.xml
@@ -9,7 +9,7 @@
<block>
<name>Viterbi Combo</name>
<key>trellis_viterbi_combined_xx</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis, digital</import>
<make>trellis.viterbi_combined_$(type)$(out_type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $dim, $table, $metric_type)</make>
<callback>set_FSM(trellis.fsm($fsm_args))</callback>
diff --git a/gr-trellis/grc/trellis_viterbi_x.xml b/gr-trellis/grc/trellis_viterbi_x.xml
index 9083061e6b..21611ee51d 100644
--- a/gr-trellis/grc/trellis_viterbi_x.xml
+++ b/gr-trellis/grc/trellis_viterbi_x.xml
@@ -9,7 +9,7 @@
<block>
<name>Viterbi</name>
<key>trellis_viterbi_x</key>
- <category>Trellis Coding</category>
+ <category>[Core]/Trellis Coding</category>
<import>from gnuradio import trellis</import>
<make>trellis.viterbi_$(type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state)</make>
<callback>set_FSM(trellis.fsm($fsm_args))</callback>
diff --git a/gr-uhd/grc/uhd_block_tree.xml b/gr-uhd/grc/uhd_block_tree.xml
index 5d3b493936..c598645526 100644
--- a/gr-uhd/grc/uhd_block_tree.xml
+++ b/gr-uhd/grc/uhd_block_tree.xml
@@ -5,7 +5,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name> <!-- Blank for Root Name -->
<cat>
<name>UHD</name>
<block>uhd_usrp_source</block>
diff --git a/gr-video-sdl/grc/video_block_tree.xml b/gr-video-sdl/grc/video_block_tree.xml
index 442c68a787..f4f3e4199c 100644
--- a/gr-video-sdl/grc/video_block_tree.xml
+++ b/gr-video-sdl/grc/video_block_tree.xml
@@ -5,7 +5,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Video</name>
<block>video_sdl_sink</block>
diff --git a/gr-vocoder/grc/vocoder_block_tree.xml b/gr-vocoder/grc/vocoder_block_tree.xml
index c96a5cc687..07d8ba8fd1 100644
--- a/gr-vocoder/grc/vocoder_block_tree.xml
+++ b/gr-vocoder/grc/vocoder_block_tree.xml
@@ -27,7 +27,7 @@
###################################################
-->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Audio</name>
<block>vocoder_alaw_decode_bs</block>
diff --git a/gr-wxgui/grc/notebook.xml b/gr-wxgui/grc/notebook.xml
index 5f30c06201..1e4b0d0679 100644
--- a/gr-wxgui/grc/notebook.xml
+++ b/gr-wxgui/grc/notebook.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Notebook</name>
<key>notebook</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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)
diff --git a/gr-wxgui/grc/variable_check_box.xml b/gr-wxgui/grc/variable_check_box.xml
index 75dae78215..da8bb8b8d5 100644
--- a/gr-wxgui/grc/variable_check_box.xml
+++ b/gr-wxgui/grc/variable_check_box.xml
@@ -8,7 +8,7 @@
<block>
<name>WX GUI Check Box</name>
<key>variable_check_box</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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'
diff --git a/gr-wxgui/grc/variable_chooser.xml b/gr-wxgui/grc/variable_chooser.xml
index ef75a04337..216be01e08 100644
--- a/gr-wxgui/grc/variable_chooser.xml
+++ b/gr-wxgui/grc/variable_chooser.xml
@@ -9,7 +9,7 @@
<block>
<name>WX GUI Chooser</name>
<key>variable_chooser</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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'
diff --git a/gr-wxgui/grc/variable_slider.xml b/gr-wxgui/grc/variable_slider.xml
index 96c0b5ec70..29f3182d0a 100644
--- a/gr-wxgui/grc/variable_slider.xml
+++ b/gr-wxgui/grc/variable_slider.xml
@@ -8,7 +8,7 @@
<block>
<name>WX GUI Slider</name>
<key>variable_slider</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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'
diff --git a/gr-wxgui/grc/variable_static_text.xml b/gr-wxgui/grc/variable_static_text.xml
index d68b00a1dd..e47f5c3731 100644
--- a/gr-wxgui/grc/variable_static_text.xml
+++ b/gr-wxgui/grc/variable_static_text.xml
@@ -8,7 +8,7 @@
<block>
<name>WX GUI Static Text</name>
<key>variable_static_text</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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'
diff --git a/gr-wxgui/grc/variable_text_box.xml b/gr-wxgui/grc/variable_text_box.xml
index a2cf1a8220..8c8119433a 100644
--- a/gr-wxgui/grc/variable_text_box.xml
+++ b/gr-wxgui/grc/variable_text_box.xml
@@ -8,7 +8,7 @@
<block>
<name>WX GUI Text Box</name>
<key>variable_text_box</key>
- <category>GUI Widgets/WX</category>
+ <category>[Core]/GUI Widgets/WX</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'
diff --git a/gr-wxgui/grc/wxgui_constellationsink2.xml b/gr-wxgui/grc/wxgui_constellationsink2.xml
index d0314ca547..999ebbe2cf 100644
--- a/gr-wxgui/grc/wxgui_constellationsink2.xml
+++ b/gr-wxgui/grc/wxgui_constellationsink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Constellation Sink</name>
<key>wxgui_constellationsink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.wxgui import constsink_gl</import>
<import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
diff --git a/gr-wxgui/grc/wxgui_fftsink2.xml b/gr-wxgui/grc/wxgui_fftsink2.xml
index 5f82670ac5..11e9c7255e 100644
--- a/gr-wxgui/grc/wxgui_fftsink2.xml
+++ b/gr-wxgui/grc/wxgui_fftsink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI FFT Sink</name>
<key>wxgui_fftsink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.fft import window</import>
<import>from gnuradio.wxgui import fftsink2</import>
<import>from gnuradio import wxgui</import>
diff --git a/gr-wxgui/grc/wxgui_histosink2.xml b/gr-wxgui/grc/wxgui_histosink2.xml
index 4fc331ab8e..63bfc000ae 100644
--- a/gr-wxgui/grc/wxgui_histosink2.xml
+++ b/gr-wxgui/grc/wxgui_histosink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Histo Sink</name>
<key>wxgui_histosink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.wxgui import histosink_gl</import>
<import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
diff --git a/gr-wxgui/grc/wxgui_numbersink2.xml b/gr-wxgui/grc/wxgui_numbersink2.xml
index 4697164088..6f4d4a574a 100644
--- a/gr-wxgui/grc/wxgui_numbersink2.xml
+++ b/gr-wxgui/grc/wxgui_numbersink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Number Sink</name>
<key>wxgui_numbersink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.wxgui import numbersink2</import>
<import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
diff --git a/gr-wxgui/grc/wxgui_scopesink2.xml b/gr-wxgui/grc/wxgui_scopesink2.xml
index ea43d3a690..7e896897d6 100644
--- a/gr-wxgui/grc/wxgui_scopesink2.xml
+++ b/gr-wxgui/grc/wxgui_scopesink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Scope Sink</name>
<key>wxgui_scopesink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.wxgui import scopesink2</import>
<import>from gnuradio import wxgui</import>
<make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
diff --git a/gr-wxgui/grc/wxgui_termsink.xml b/gr-wxgui/grc/wxgui_termsink.xml
index 1367f4af8a..54fedde081 100644
--- a/gr-wxgui/grc/wxgui_termsink.xml
+++ b/gr-wxgui/grc/wxgui_termsink.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Terminal Sink</name>
<key>wxgui_termsink</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.wxgui import termsink</import>
<import>from gnuradio import wxgui</import>
diff --git a/gr-wxgui/grc/wxgui_waterfallsink2.xml b/gr-wxgui/grc/wxgui_waterfallsink2.xml
index bee28f23fa..5b56f98ebe 100644
--- a/gr-wxgui/grc/wxgui_waterfallsink2.xml
+++ b/gr-wxgui/grc/wxgui_waterfallsink2.xml
@@ -7,7 +7,7 @@
<block>
<name>WX GUI Waterfall Sink</name>
<key>wxgui_waterfallsink2</key>
- <category>Instrumentation/WX</category>
+ <category>[Core]/Instrumentation/WX</category>
<import>from gnuradio.fft import window</import>
<import>from gnuradio.wxgui import waterfallsink2</import>
<import>from gnuradio import wxgui</import>
diff --git a/gr-zeromq/grc/zeromq_pub_msg_sink.xml b/gr-zeromq/grc/zeromq_pub_msg_sink.xml
index 8f541ce731..245ac37180 100644
--- a/gr-zeromq/grc/zeromq_pub_msg_sink.xml
+++ b/gr-zeromq/grc/zeromq_pub_msg_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PUB Message Sink</name>
<key>zeromq_pub_msg_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.pub_msg_sink($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_pub_sink.xml b/gr-zeromq/grc/zeromq_pub_sink.xml
index 1b2f9ec52a..af130eeb21 100644
--- a/gr-zeromq/grc/zeromq_pub_sink.xml
+++ b/gr-zeromq/grc/zeromq_pub_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PUB Sink</name>
<key>zeromq_pub_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.pub_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/gr-zeromq/grc/zeromq_pull_msg_source.xml b/gr-zeromq/grc/zeromq_pull_msg_source.xml
index c0a6ca5a17..c6004d987e 100644
--- a/gr-zeromq/grc/zeromq_pull_msg_source.xml
+++ b/gr-zeromq/grc/zeromq_pull_msg_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PULL Message Source</name>
<key>zeromq_pull_msg_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.pull_msg_source($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_pull_source.xml b/gr-zeromq/grc/zeromq_pull_source.xml
index 8158b47361..f2c8b61d86 100644
--- a/gr-zeromq/grc/zeromq_pull_source.xml
+++ b/gr-zeromq/grc/zeromq_pull_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PULL Source</name>
<key>zeromq_pull_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.pull_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/gr-zeromq/grc/zeromq_push_msg_sink.xml b/gr-zeromq/grc/zeromq_push_msg_sink.xml
index 65626c0761..283a250064 100644
--- a/gr-zeromq/grc/zeromq_push_msg_sink.xml
+++ b/gr-zeromq/grc/zeromq_push_msg_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PUSH Message Sink</name>
<key>zeromq_push_msg_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.push_msg_sink($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_push_sink.xml b/gr-zeromq/grc/zeromq_push_sink.xml
index 528da94ee6..8277c02c22 100644
--- a/gr-zeromq/grc/zeromq_push_sink.xml
+++ b/gr-zeromq/grc/zeromq_push_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ PUSH Sink</name>
<key>zeromq_push_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.push_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/gr-zeromq/grc/zeromq_rep_msg_sink.xml b/gr-zeromq/grc/zeromq_rep_msg_sink.xml
index f978f442a7..37515b39bc 100644
--- a/gr-zeromq/grc/zeromq_rep_msg_sink.xml
+++ b/gr-zeromq/grc/zeromq_rep_msg_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ REP Message Sink</name>
<key>zeromq_rep_msg_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.rep_msg_sink($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_rep_sink.xml b/gr-zeromq/grc/zeromq_rep_sink.xml
index db735a37bb..17c824156c 100644
--- a/gr-zeromq/grc/zeromq_rep_sink.xml
+++ b/gr-zeromq/grc/zeromq_rep_sink.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ REP Sink</name>
<key>zeromq_rep_sink</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.rep_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/gr-zeromq/grc/zeromq_req_msg_source.xml b/gr-zeromq/grc/zeromq_req_msg_source.xml
index 3ba7488223..ae34c30dd0 100644
--- a/gr-zeromq/grc/zeromq_req_msg_source.xml
+++ b/gr-zeromq/grc/zeromq_req_msg_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ REQ Message Source</name>
<key>zeromq_req_msg_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.req_msg_source($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_req_source.xml b/gr-zeromq/grc/zeromq_req_source.xml
index 2ef224399d..0fc1aa1488 100644
--- a/gr-zeromq/grc/zeromq_req_source.xml
+++ b/gr-zeromq/grc/zeromq_req_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ REQ Source</name>
<key>zeromq_req_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.req_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/gr-zeromq/grc/zeromq_sub_msg_source.xml b/gr-zeromq/grc/zeromq_sub_msg_source.xml
index 32a1c9862b..475537f5fe 100644
--- a/gr-zeromq/grc/zeromq_sub_msg_source.xml
+++ b/gr-zeromq/grc/zeromq_sub_msg_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ SUB Message Source</name>
<key>zeromq_sub_msg_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.sub_msg_source($address, $timeout)</make>
diff --git a/gr-zeromq/grc/zeromq_sub_source.xml b/gr-zeromq/grc/zeromq_sub_source.xml
index 268a8938d5..31e6170c6a 100644
--- a/gr-zeromq/grc/zeromq_sub_source.xml
+++ b/gr-zeromq/grc/zeromq_sub_source.xml
@@ -2,7 +2,7 @@
<block>
<name>ZMQ SUB Source</name>
<key>zeromq_sub_source</key>
- <category>ZeroMQ Interfaces</category>
+ <category>[Core]/ZeroMQ Interfaces</category>
<import>from gnuradio import zeromq</import>
<make>zeromq.sub_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
index a8775d6872..3125864d4d 100644
--- a/grc/blocks/block_tree.xml
+++ b/grc/blocks/block_tree.xml
@@ -1,11 +1,6 @@
<?xml version="1.0"?>
-<!--
-###################################################
-##Block Tree for platform gnuradio python.
-###################################################
- -->
<cat>
- <name></name> <!-- Blank for Root Name -->
+ <name>[Core]</name>
<cat>
<name>Misc</name>
<block>pad_source</block>
@@ -18,12 +13,16 @@
<block>bus_structure_sink</block>
<block>bus_structure_source</block>
+ <block>epy_block</block>
+ <block>epy_module</block>
+
<block>note</block>
<block>import</block>
</cat>
<cat>
<name>Variables</name>
<block>variable</block>
+ <block>variable_struct</block>
<block>variable_config</block>
<block>variable_function_probe</block>
<block>parameter</block>
diff --git a/grc/blocks/epy_block.xml b/grc/blocks/epy_block.xml
index 3fd5aa84f1..65e78c4062 100644
--- a/grc/blocks/epy_block.xml
+++ b/grc/blocks/epy_block.xml
@@ -2,7 +2,6 @@
<block>
<name>Python Block</name>
<key>epy_block</key>
- <category>Misc</category>
<import></import>
<make></make>
<param><!-- Cache the last working block IO to keep FG sane -->
diff --git a/grc/blocks/epy_module.xml b/grc/blocks/epy_module.xml
index 6d6d71804c..fa3e5f91f4 100644
--- a/grc/blocks/epy_module.xml
+++ b/grc/blocks/epy_module.xml
@@ -2,7 +2,6 @@
<block>
<name>Python Module</name>
<key>epy_module</key>
- <category>Misc</category>
<import>import $id # embedded python module</import>
<make></make>
<param>
diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml
index bb96f29a60..55f411884d 100644
--- a/grc/blocks/options.xml
+++ b/grc/blocks/options.xml
@@ -84,7 +84,7 @@ else: self.stop(); self.wait()</callback>
<param>
<name>Category</name>
<key>category</key>
- <value>Custom</value>
+ <value>[GRC Hier Blocks]</value>
<type>string</type>
<hide>#if $generate_options().startswith('hb') then 'none' else 'all'#</hide>
</param>
diff --git a/grc/blocks/variable_struct.xml.py b/grc/blocks/variable_struct.xml.py
index e43200828b..de4411e975 100644
--- a/grc/blocks/variable_struct.xml.py
+++ b/grc/blocks/variable_struct.xml.py
@@ -6,7 +6,6 @@ HEADER = """\
<block>
<name>Struct Variable</name>
<key>variable_struct</key>
- <category>Variables</category>
<import>def struct(data): return type('Struct', (object,), data)()</import>
<var_make>self.$id = $id = struct({{#slurp
#for $i in range({0}):
diff --git a/grc/core/Block.py b/grc/core/Block.py
index f67d990857..8a683a2b6b 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -79,7 +79,8 @@ class Block(Element):
sinks = n.findall('sink')
self._name = n.find('name')
self._key = n.find('key')
- self._category = n.find('category') or ''
+ category = (n.find('category') or '').split('/')
+ self.category = [cat.strip() for cat in category if cat.strip()]
self._flags = n.find('flags') or ''
# Backwards compatibility
if n.find('throttle') and BLOCK_FLAG_THROTTLE not in self._flags:
@@ -594,12 +595,6 @@ class Block(Element):
def get_key(self):
return self._key
- def get_category(self):
- return self._category
-
- def set_category(self, cat):
- self._category = cat
-
def get_ports(self):
return self.get_sources() + self.get_sinks()
diff --git a/grc/core/Constants.py b/grc/core/Constants.py
index 462049cc73..eeb1d7f848 100644
--- a/grc/core/Constants.py
+++ b/grc/core/Constants.py
@@ -37,6 +37,7 @@ FLOW_GRAPH_FILE_FORMAT_VERSION = 1
# Param tabs
DEFAULT_PARAM_TAB = "General"
ADVANCED_PARAM_TAB = "Advanced"
+DEFAULT_BLOCK_MODULE_NAME = '(no module specified)'
# Port domains
GR_STREAM_DOMAIN = "gr_stream"
diff --git a/grc/core/Platform.py b/grc/core/Platform.py
index 5bcf79c4b2..9b25e67d65 100644
--- a/grc/core/Platform.py
+++ b/grc/core/Platform.py
@@ -67,15 +67,15 @@ class Platform(Element):
self._flow_graph = Element(self)
self._flow_graph.connections = []
- self.blocks = None
- self._blocks_n = None
- self._category_trees_n = None
+ self.blocks = odict()
+ self._blocks_n = odict()
+ self._block_categories = {}
self.domains = {}
self.connection_templates = {}
self._auto_hier_block_generate_chain = set()
- self.load_blocks()
+ self.build_block_library()
def __str__(self):
return 'Platform - {}({})'.format(self.config.key, self.config.name)
@@ -133,16 +133,17 @@ class Platform(Element):
self.load_block_xml(generator.get_file_path_xml())
return True
- def load_blocks(self):
+ def build_block_library(self):
"""load the blocks and block tree from the search paths"""
self._docstring_extractor.start()
# Reset
- self.blocks = odict()
- self._blocks_n = odict()
- self._category_trees_n = list()
+ self.blocks.clear()
+ self._blocks_n.clear()
+ self._block_categories.clear()
self.domains.clear()
self.connection_templates.clear()
ParseXML.xml_failures.clear()
+
# Try to parse and load blocks
for xml_file in self.iter_xml_files():
try:
@@ -158,6 +159,19 @@ class Platform(Element):
except Exception as e:
print >> sys.stderr, 'Warning: XML parsing failed:\n\t%r\n\tIgnoring: %s' % (e, xml_file)
+ # Add blocks to block tree
+ for key, block in self.blocks.iteritems():
+ category = self._block_categories.get(key, block.category)
+ # Blocks with empty categories are hidden
+ if not category:
+ continue
+ root = category[0]
+ if root.startswith('[') and root.endswith(']'):
+ category[0] = root[1:-1]
+ else:
+ category.insert(0, Constants.DEFAULT_BLOCK_MODULE_NAME)
+ block.category = category
+
self._docstring_extractor.finish()
# self._docstring_extractor.wait()
@@ -195,8 +209,19 @@ class Platform(Element):
def load_category_tree_xml(self, xml_file):
"""Validate and parse category tree file and add it to list"""
ParseXML.validate_dtd(xml_file, Constants.BLOCK_TREE_DTD)
- n = ParseXML.from_file(xml_file).find('cat')
- self._category_trees_n.append(n)
+ xml = ParseXML.from_file(xml_file)
+ path = []
+
+ def load_category(cat_n):
+ path.append(cat_n.find('name').strip())
+ for block_key in cat_n.findall('block'):
+ if block_key not in self._block_categories:
+ self._block_categories[block_key] = list(path)
+ for sub_cat_n in cat_n.findall('cat'):
+ load_category(sub_cat_n)
+ path.pop()
+
+ load_category(xml.find('cat'))
def load_domain_xml(self, xml_file):
"""Load a domain properties and connection templates from XML"""
@@ -241,43 +266,6 @@ class Platform(Element):
else:
self.connection_templates[key] = connection_n.find('make') or ''
- def load_block_tree(self, block_tree):
- """
- Load a block tree with categories and blocks.
- Step 1: Load all blocks from the xml specification.
- Step 2: Load blocks with builtin category specifications.
-
- Args:
- block_tree: the block tree object
- """
- # Recursive function to load categories and blocks
- def load_category(cat_n, parent=None):
- # Add this category
- parent = (parent or []) + [cat_n.find('name')]
- block_tree.add_block(parent)
- # Recursive call to load sub categories
- map(lambda c: load_category(c, parent), cat_n.findall('cat'))
- # Add blocks in this category
- for block_key in cat_n.findall('block'):
- if block_key not in self.blocks:
- print >> sys.stderr, 'Warning: Block key "{}" not found when loading category tree.'.format(block_key)
- continue
- block = self.blocks[block_key]
- # If it exists, the block's category shall not be overridden by the xml tree
- if not block.get_category():
- block.set_category(parent)
-
- # Recursively load the category trees and update the categories for each block
- for category_tree_n in self._category_trees_n:
- load_category(category_tree_n)
-
- # Add blocks to block tree
- for block in self.blocks.itervalues():
- # Blocks with empty categories are hidden
- if not block.get_category():
- continue
- block_tree.add_block(block.get_category(), block)
-
def _save_docstring_extraction_result(self, key, docstrings):
docs = {}
for match, docstring in docstrings.iteritems():
diff --git a/grc/core/utils/odict.py b/grc/core/utils/odict.py
index 20970e947c..85927e869f 100644
--- a/grc/core/utils/odict.py
+++ b/grc/core/utils/odict.py
@@ -109,3 +109,7 @@ class odict(DictMixin):
if isinstance(obj, list):
return obj
return [obj]
+
+ def clear(self):
+ self._data.clear()
+ del self._keys[:] \ No newline at end of file
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py
index 2b39079f76..11e81c4613 100644
--- a/grc/gui/ActionHandler.py
+++ b/grc/gui/ActionHandler.py
@@ -607,9 +607,8 @@ class ActionHandler:
elif action == Actions.PAGE_CHANGE: # pass and run the global actions
pass
elif action == Actions.RELOAD_BLOCKS:
- self.platform.load_blocks()
- main.btwin.clear()
- self.platform.load_block_tree(main.btwin)
+ self.platform.build_block_library()
+ main.btwin.repopulate()
Actions.XML_PARSER_ERRORS_DISPLAY.set_sensitive(bool(
ParseXML.xml_failures))
Messages.send_xml_errors_if_any(ParseXML.xml_failures)
diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py
index 4279e8c61d..f49eb6c4fe 100644
--- a/grc/gui/BlockTreeWindow.py
+++ b/grc/gui/BlockTreeWindow.py
@@ -23,7 +23,8 @@ import gtk
import gobject
from . import Actions, Utils
-from .Constants import DEFAULT_BLOCKS_WINDOW_WIDTH, DND_TARGETS
+from . import Constants
+
NAME_INDEX = 0
KEY_INDEX = 1
@@ -54,7 +55,27 @@ $encode($line)#slurp
undocumented#slurp
#end if"""
-CAT_MARKUP_TMPL = """Category: $cat"""
+CAT_MARKUP_TMPL = """
+#set $name = $cat[-1]
+#if len($cat) > 1
+Category: $cat[-1]
+##
+#elif $name == 'Core'
+Module: Core
+
+This subtree is meant for blocks included with GNU Radio (in-tree).
+##
+#elif $name == $default_module
+This subtree holds all blocks (from OOT modules) that specify no module name. \
+The module name is the root category enclosed in square brackets.
+
+Please consider contacting OOT module maintainer for any block in here \
+and kindly ask to update their GRC Block Descriptions or Block Tree to include a module name.
+#else
+Module: $name
+##
+#end if
+""".strip()
class BlockTreeWindow(gtk.VBox):
@@ -113,56 +134,65 @@ class BlockTreeWindow(gtk.VBox):
column.set_sort_column_id(0)
self.treestore.set_sort_column_id(0, gtk.SORT_ASCENDING)
# setup drag and drop
- self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, DND_TARGETS, gtk.gdk.ACTION_COPY)
+ self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, Constants.DND_TARGETS, gtk.gdk.ACTION_COPY)
self.treeview.connect('drag-data-get', self._handle_drag_get_data)
# make the scrolled window to hold the tree view
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scrolled_window.add_with_viewport(self.treeview)
- scrolled_window.set_size_request(DEFAULT_BLOCKS_WINDOW_WIDTH, -1)
+ scrolled_window.set_size_request(Constants.DEFAULT_BLOCKS_WINDOW_WIDTH, -1)
self.pack_start(scrolled_window)
# map categories to iters, automatic mapping for root
self._categories = {tuple(): None}
self._categories_search = {tuple(): None}
- # add blocks and categories
- self.platform.load_block_tree(self)
self.platform.block_docstrings_loaded_callback = self.update_docs
+ self.repopulate()
def clear(self):
- self.treestore.clear();
- self._categories = {tuple(): None}
+ self.treestore.clear()
+ self._categories = {(): None}
+
+ def repopulate(self):
+ self.clear()
+ for block in self.platform.blocks.itervalues():
+ if block.category:
+ self.add_block(block)
+ self.expand_module_in_tree()
+
+ def expand_module_in_tree(self, module_name='Core'):
+ self.treeview.collapse_all()
+ core_module_iter = self._categories.get((module_name,))
+ if core_module_iter:
+ self.treeview.expand_row(self.treestore.get_path(core_module_iter), False)
############################################################
## Block Tree Methods
############################################################
- def add_block(self, category, block=None, treestore=None, categories=None):
+ def add_block(self, block, treestore=None, categories=None):
"""
Add a block with category to this selection window.
Add only the category when block is None.
Args:
- category: the category list or path string
block: the block object or None
"""
- if treestore is None:
- treestore = self.treestore
- if categories is None:
- categories = self._categories
+ treestore = treestore or self.treestore
+ categories = categories or self._categories
+
+ category = tuple(filter(str, block.category)) # tuple is hashable, remove empty cats
- if isinstance(category, (str, unicode)): category = category.split('/')
- category = tuple(filter(lambda x: x, category)) # tuple is hashable
# add category and all sub categories
- for i, cat_name in enumerate(category):
- sub_category = category[:i+1]
- if sub_category not in categories:
- iter_ = treestore.insert_before(categories[sub_category[:-1]], None)
- treestore.set_value(iter_, NAME_INDEX, cat_name)
+ for level, parent_cat_name in enumerate(category, 1):
+ parent_category = category[:level]
+ if parent_category not in categories:
+ iter_ = treestore.insert_before(categories[parent_category[:-1]], None)
+ treestore.set_value(iter_, NAME_INDEX, parent_cat_name)
treestore.set_value(iter_, KEY_INDEX, '')
- treestore.set_value(iter_, DOC_INDEX, Utils.parse_template(CAT_MARKUP_TMPL, cat=cat_name))
- categories[sub_category] = iter_
+ treestore.set_value(iter_, DOC_INDEX, Utils.parse_template(
+ CAT_MARKUP_TMPL, cat=parent_category, default_module=Constants.DEFAULT_BLOCK_MODULE_NAME))
+ categories[parent_category] = iter_
+
# add block
- if block is None:
- return
iter_ = treestore.insert_before(categories[category], None)
treestore.set_value(iter_, NAME_INDEX, block.get_name())
treestore.set_value(iter_, KEY_INDEX, block.get_key())
@@ -226,7 +256,7 @@ class BlockTreeWindow(gtk.VBox):
key = widget.get_text().lower()
if not key:
self.treeview.set_model(self.treestore)
- self.treeview.collapse_all()
+ self.expand_module_in_tree()
else:
matching_blocks = filter(lambda b: key in b.get_key().lower() or key in b.get_name().lower(),
self.platform.blocks.values())
@@ -234,8 +264,7 @@ class BlockTreeWindow(gtk.VBox):
self.treestore_search.clear()
self._categories_search = {tuple(): None}
for block in matching_blocks:
- self.add_block(block.get_category() or 'None', block,
- self.treestore_search, self._categories_search)
+ self.add_block(block, self.treestore_search, self._categories_search)
self.treeview.set_model(self.treestore_search)
self.treeview.expand_all()