[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 16/101: Merge remote-tracking branch 'grcwg
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 16/101: Merge remote-tracking branch 'grcwg/next_grcwg' into gtk3 |
Date: |
Thu, 16 Mar 2017 14:57:59 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
jcorgan pushed a commit to branch python3
in repository gnuradio.
commit 893b74c770b81f2c09094577e2de720155f84b61
Merge: 7ac7cf6 6fb0ff2
Author: Sebastian Koslowski <address@hidden>
Date: Fri Jun 10 15:15:16 2016 +0200
Merge remote-tracking branch 'grcwg/next_grcwg' into gtk3
CMakeLists.txt | 64 +-
cmake/Modules/FindGSL.cmake | 2 +-
cmake/Modules/FindGnuradio.cmake | 3 -
cmake/Modules/FindQwt.cmake | 4 +-
...nuradioConfig.cmake => GnuradioConfig.cmake.in} | 5 +-
cmake/Modules/GrBoost.cmake | 7 +-
cmake/Packaging/Fedora-15.cmake | 3 +-
cmake/Packaging/Fedora-16.cmake | 3 +-
cmake/Packaging/Fedora-17.cmake | 1 +
cmake/Packaging/Fedora-18.cmake | 1 +
cmake/Packaging/Ubuntu-10.04.cmake | 1 +
cmake/Packaging/Ubuntu-10.10.cmake | 1 +
cmake/Packaging/Ubuntu-11.04.cmake | 1 +
cmake/Packaging/Ubuntu-11.10.cmake | 1 +
cmake/Packaging/Ubuntu-12.04.cmake | 1 +
cmake/Packaging/Ubuntu-12.10.cmake | 1 +
cmake/Packaging/Ubuntu-13.04.cmake | 1 +
.../{Ubuntu-13.04.cmake => Ubuntu-15.10.cmake} | 1 +
cmake/msvc/config.h | 7 +
docs/doxygen/Doxyfile.in | 8 -
docs/doxygen/other/build_guide.dox | 1 +
docs/doxygen/other/group_defs.dox | 5 -
docs/sphinx/source/fcd_blocks.rst | 6 -
docs/sphinx/source/noaa_blocks.rst | 8 -
dtools/bin/install-tbb | 88 -
gnuradio-runtime/examples/mp-sched/affinity_set.py | 8 +-
gnuradio-runtime/examples/mp-sched/plot_flops.py | 15 +-
.../examples/mp-sched/run_synthetic.py | 39 +-
gnuradio-runtime/include/gnuradio/attributes.h | 11 +
gnuradio-runtime/include/gnuradio/high_res_timer.h | 2 +-
gnuradio-runtime/include/gnuradio/types.h | 23 -
gnuradio-runtime/lib/CMakeLists.txt | 8 +-
gnuradio-runtime/lib/flat_flowgraph.cc | 4 +-
gnuradio-runtime/lib/math/random.cc | 2 +-
gnuradio-runtime/lib/realtime_impl.cc | 70 +-
gnuradio-runtime/lib/scheduler.h | 2 +-
gnuradio-runtime/lib/thread/thread.cc | 10 +-
gnuradio-runtime/lib/thread/thread_body_wrapper.cc | 2 +-
gnuradio-runtime/lib/tpb_thread_body.cc | 4 +-
gnuradio-runtime/python/gnuradio/__init__.py | 3 -
gnuradio-runtime/python/gnuradio/eng_option.py | 16 -
gr-analog/grc/analog_block_tree.xml | 2 +-
gr-atsc/CMakeLists.txt | 114 -
gr-atsc/README | 27 -
gr-atsc/README.signal_flow | 41 -
gr-atsc/gnuradio-atsc.pc.in | 11 -
gr-atsc/include/gnuradio/atsc/CMakeLists.txt | 103 -
.../include/gnuradio/atsc/GrAtscBitTimingLoop.h | 90 -
.../include/gnuradio/atsc/GrAtscBitTimingLoop2.h | 80 -
.../include/gnuradio/atsc/GrAtscBitTimingLoop3.h | 72 -
.../include/gnuradio/atsc/GrAtscConvert2xTo20.h | 50 -
.../gnuradio/atsc/GrAtscDataSegToSoftDataSeg.h | 50 -
.../include/gnuradio/atsc/GrAtscDeinterleaver.h | 51 -
gr-atsc/include/gnuradio/atsc/GrAtscDerandomizer.h | 51 -
gr-atsc/include/gnuradio/atsc/GrAtscEqualizer.h | 59 -
gr-atsc/include/gnuradio/atsc/GrAtscFPLL.h | 88 -
.../include/gnuradio/atsc/GrAtscFieldSyncChecker.h | 54 -
.../gnuradio/atsc/GrAtscFieldSyncCorrelator.h | 56 -
.../include/gnuradio/atsc/GrAtscFieldSyncDemux.h | 60 -
gr-atsc/include/gnuradio/atsc/GrAtscFieldSyncMux.h | 58 -
gr-atsc/include/gnuradio/atsc/GrAtscInterleaver.h | 51 -
gr-atsc/include/gnuradio/atsc/GrAtscRSDecoder.h | 51 -
gr-atsc/include/gnuradio/atsc/GrAtscRSEncoder.h | 51 -
gr-atsc/include/gnuradio/atsc/GrAtscRandomizer.h | 55 -
gr-atsc/include/gnuradio/atsc/GrAtscSegSymSync.h | 64 -
.../include/gnuradio/atsc/GrAtscSegSymSyncImpl.h | 69 -
.../gnuradio/atsc/GrAtscSegSymSyncImpl_export.h | 26 -
gr-atsc/include/gnuradio/atsc/GrAtscSymbolMapper.h | 97 -
.../include/gnuradio/atsc/GrAtscTrellisEncoder.h | 50 -
.../include/gnuradio/atsc/GrAtscViterbiDecoder.h | 51 -
gr-atsc/include/gnuradio/atsc/api.h | 33 -
.../gnuradio/atsc/basic_trellis_encoder_impl.h | 62 -
gr-atsc/include/gnuradio/atsc/bit_timing_loop.h | 89 -
gr-atsc/include/gnuradio/atsc/consts.h | 42 -
.../gnuradio/atsc/convolutional_interleaver.h | 126 -
.../include/gnuradio/atsc/create_atsci_equalizer.h | 34 -
.../gnuradio/atsc/create_atsci_fs_checker.h | 36 -
.../gnuradio/atsc/create_atsci_fs_correlator.h | 36 -
.../include/gnuradio/atsc/data_interleaver_impl.h | 65 -
gr-atsc/include/gnuradio/atsc/deinterleaver.h | 58 -
gr-atsc/include/gnuradio/atsc/depad.h | 54 -
gr-atsc/include/gnuradio/atsc/derandomizer.h | 57 -
gr-atsc/include/gnuradio/atsc/diag_output_impl.h | 29 -
gr-atsc/include/gnuradio/atsc/ds_to_softds.h | 60 -
gr-atsc/include/gnuradio/atsc/equalizer.h | 71 -
gr-atsc/include/gnuradio/atsc/equalizer_impl.h | 169 -
.../include/gnuradio/atsc/equalizer_lms2_impl.h | 80 -
gr-atsc/include/gnuradio/atsc/equalizer_lms_impl.h | 79 -
gr-atsc/include/gnuradio/atsc/equalizer_nop_impl.h | 63 -
gr-atsc/include/gnuradio/atsc/exp2_lp_impl.h | 35 -
.../gnuradio/atsc/fake_single_viterbi_impl.h | 52 -
gr-atsc/include/gnuradio/atsc/field_sync_demux.h | 76 -
gr-atsc/include/gnuradio/atsc/field_sync_mux.h | 68 -
gr-atsc/include/gnuradio/atsc/fpll.h | 82 -
gr-atsc/include/gnuradio/atsc/fs_checker.h | 64 -
gr-atsc/include/gnuradio/atsc/fs_checker_impl.h | 70 -
.../include/gnuradio/atsc/fs_checker_naive_impl.h | 74 -
gr-atsc/include/gnuradio/atsc/fs_correlator_impl.h | 66 -
.../gnuradio/atsc/fs_correlator_naive_impl.h | 70 -
gr-atsc/include/gnuradio/atsc/interleaver.h | 57 -
gr-atsc/include/gnuradio/atsc/interleaver_fifo.h | 86 -
gr-atsc/include/gnuradio/atsc/pad.h | 57 -
gr-atsc/include/gnuradio/atsc/pnXXX_impl.h | 26 -
gr-atsc/include/gnuradio/atsc/randomizer.h | 60 -
gr-atsc/include/gnuradio/atsc/randomizer_impl.h | 97 -
gr-atsc/include/gnuradio/atsc/reed_solomon_impl.h | 57 -
.../atsc/root_raised_cosine_bandpass_impl.h | 40 -
.../gnuradio/atsc/root_raised_cosine_impl.h | 36 -
gr-atsc/include/gnuradio/atsc/rs_decoder.h | 58 -
gr-atsc/include/gnuradio/atsc/rs_encoder.h | 58 -
.../include/gnuradio/atsc/single_viterbi_impl.h | 58 -
gr-atsc/include/gnuradio/atsc/slicer_agc_impl.h | 69 -
.../gnuradio/atsc/sliding_correlator_impl.h | 86 -
gr-atsc/include/gnuradio/atsc/sssr_impl.h | 241 -
gr-atsc/include/gnuradio/atsc/syminfo_impl.h | 58 -
gr-atsc/include/gnuradio/atsc/sync_tag_impl.h | 56 -
gr-atsc/include/gnuradio/atsc/trellis_encoder.h | 57 -
.../include/gnuradio/atsc/trellis_encoder_impl.h | 67 -
gr-atsc/include/gnuradio/atsc/types.h | 238 -
gr-atsc/include/gnuradio/atsc/viterbi_decoder.h | 62 -
.../include/gnuradio/atsc/viterbi_decoder_impl.h | 84 -
gr-atsc/include/gnuradio/atsc/vsbtx_lp_impl.h | 37 -
gr-atsc/lib/CMakeLists.txt | 185 -
gr-atsc/lib/GrAtscBitTimingLoop.cc | 223 -
gr-atsc/lib/GrAtscBitTimingLoop2.cc | 173 -
gr-atsc/lib/GrAtscBitTimingLoop3.cc | 106 -
gr-atsc/lib/GrAtscConvert2xTo20.cc | 106 -
gr-atsc/lib/GrAtscDataSegToSoftDataSeg.cc | 101 -
gr-atsc/lib/GrAtscDeinterleaver.cc | 92 -
gr-atsc/lib/GrAtscDerandomizer.cc | 106 -
gr-atsc/lib/GrAtscEqualizer.cc | 135 -
gr-atsc/lib/GrAtscFPLL.cc | 150 -
gr-atsc/lib/GrAtscFieldSyncChecker.cc | 101 -
gr-atsc/lib/GrAtscFieldSyncCorrelator.cc | 95 -
gr-atsc/lib/GrAtscFieldSyncDemux.cc | 173 -
gr-atsc/lib/GrAtscFieldSyncMux.cc | 246 -
gr-atsc/lib/GrAtscInterleaver.cc | 101 -
gr-atsc/lib/GrAtscRSDecoder.cc | 81 -
gr-atsc/lib/GrAtscRSEncoder.cc | 84 -
gr-atsc/lib/GrAtscRandomizer.cc | 110 -
gr-atsc/lib/GrAtscSegSymSync.cc | 50 -
gr-atsc/lib/GrAtscSegSymSyncImpl.cc | 103 -
gr-atsc/lib/GrAtscTrellisEncoder.cc | 144 -
gr-atsc/lib/GrAtscViterbiDecoder.cc | 135 -
gr-atsc/lib/atsc_bit_timing_loop.cc | 125 -
gr-atsc/lib/atsc_deinterleaver.cc | 59 -
gr-atsc/lib/atsc_depad.cc | 61 -
gr-atsc/lib/atsc_derandomizer.cc | 79 -
gr-atsc/lib/atsc_ds_to_softds.cc | 73 -
gr-atsc/lib/atsc_equalizer.cc | 105 -
gr-atsc/lib/atsc_field_sync_demux.cc | 209 -
gr-atsc/lib/atsc_field_sync_mux.cc | 205 -
gr-atsc/lib/atsc_fpll.cc | 137 -
gr-atsc/lib/atsc_fs_checker.cc | 75 -
gr-atsc/lib/atsc_interleaver.cc | 59 -
gr-atsc/lib/atsc_pad.cc | 78 -
gr-atsc/lib/atsc_randomizer.cc | 87 -
gr-atsc/lib/atsc_rs_decoder.cc | 63 -
gr-atsc/lib/atsc_rs_encoder.cc | 62 -
gr-atsc/lib/atsc_trellis_encoder.cc | 60 -
gr-atsc/lib/atsc_viterbi_decoder.cc | 86 -
gr-atsc/lib/atsci_basic_trellis_encoder.cc | 62 -
gr-atsc/lib/atsci_data_interleaver.cc | 61 -
gr-atsc/lib/atsci_equalizer.cc | 248 -
gr-atsc/lib/atsci_equalizer_lms.cc | 308 -
gr-atsc/lib/atsci_equalizer_lms2.cc | 376 -
gr-atsc/lib/atsci_equalizer_nop.cc | 133 -
gr-atsc/lib/atsci_exp2_lp.cc | 84 -
gr-atsc/lib/atsci_exp2_lp20.dat | 178 -
gr-atsc/lib/atsci_exp2_lp2x.dat | 196 -
gr-atsc/lib/atsci_fake_single_viterbi.cc | 69 -
gr-atsc/lib/atsci_fs_checker.cc | 33 -
gr-atsc/lib/atsci_fs_checker_naive.cc | 140 -
gr-atsc/lib/atsci_fs_correlator.cc | 33 -
gr-atsc/lib/atsci_fs_correlator_naive.cc | 125 -
gr-atsc/lib/atsci_pnXXX.cc | 55 -
gr-atsc/lib/atsci_randomizer.cc | 112 -
gr-atsc/lib/atsci_reed_solomon.cc | 94 -
gr-atsc/lib/atsci_root_raised_cosine.cc | 36 -
gr-atsc/lib/atsci_root_raised_cosine_bandpass.cc | 51 -
gr-atsc/lib/atsci_single_viterbi.cc | 100 -
gr-atsc/lib/atsci_sliding_correlator.cc | 90 -
gr-atsc/lib/atsci_sssr.cc | 297 -
gr-atsc/lib/atsci_trellis_encoder.cc | 208 -
gr-atsc/lib/atsci_viterbi_decoder.cc | 176 -
gr-atsc/lib/atsci_viterbi_gen.cc | 267 -
gr-atsc/lib/atsci_vsbtx_lp.cc | 59 -
gr-atsc/lib/atsci_vsbtx_lp.dat | 49 -
gr-atsc/lib/create_atsci_equalizer.cc | 44 -
gr-atsc/lib/create_atsci_fs_checker.cc | 30 -
gr-atsc/lib/create_atsci_fs_correlator.cc | 30 -
gr-atsc/lib/fpll_btloop_coupling.h | 38 -
gr-atsc/lib/gen_encoder.py | 63 -
gr-atsc/lib/gnuradio-atsc.rc.in | 55 -
gr-atsc/lib/plinfo.cc | 59 -
gr-atsc/lib/qa_atsci.cc | 63 -
gr-atsc/lib/qa_atsci.h | 37 -
gr-atsc/lib/qa_atsci_basic_trellis_encoder.cc | 67 -
gr-atsc/lib/qa_atsci_basic_trellis_encoder.h | 44 -
gr-atsc/lib/qa_atsci_data_interleaver.cc | 197 -
gr-atsc/lib/qa_atsci_data_interleaver.h | 60 -
gr-atsc/lib/qa_atsci_equalizer_nop.cc | 247 -
gr-atsc/lib/qa_atsci_equalizer_nop.h | 51 -
gr-atsc/lib/qa_atsci_fake_single_viterbi.cc | 146 -
gr-atsc/lib/qa_atsci_fake_single_viterbi.h | 51 -
gr-atsc/lib/qa_atsci_fs_correlator.cc | 256 -
gr-atsc/lib/qa_atsci_fs_correlator.h | 58 -
gr-atsc/lib/qa_atsci_randomizer.cc | 145 -
gr-atsc/lib/qa_atsci_randomizer.h | 62 -
gr-atsc/lib/qa_atsci_reed_solomon.cc | 115 -
gr-atsc/lib/qa_atsci_reed_solomon.h | 43 -
gr-atsc/lib/qa_atsci_single_viterbi.cc | 286 -
gr-atsc/lib/qa_atsci_single_viterbi.h | 53 -
gr-atsc/lib/qa_atsci_sliding_correlator.cc | 51 -
gr-atsc/lib/qa_atsci_sliding_correlator.h | 52 -
gr-atsc/lib/qa_atsci_trellis_encoder.cc | 116 -
gr-atsc/lib/qa_atsci_trellis_encoder.h | 54 -
gr-atsc/lib/qa_atsci_trellis_encoder_t1_input.dat | 2484 -----
gr-atsc/lib/qa_atsci_trellis_encoder_t1_output.dat | 9984 --------------------
gr-atsc/lib/qa_atsci_viterbi_decoder.cc | 178 -
gr-atsc/lib/qa_atsci_viterbi_decoder.h | 54 -
gr-atsc/lib/qa_atsci_viterbi_decoder_t1_input.dat | 9984 --------------------
gr-atsc/lib/qa_atsci_viterbi_decoder_t1_output.dat | 2484 -----
gr-atsc/lib/qa_convolutional_interleaver.cc | 131 -
gr-atsc/lib/qa_convolutional_interleaver.h | 69 -
gr-atsc/lib/qa_interleaver_fifo.cc | 58 -
gr-atsc/lib/qa_interleaver_fifo.h | 57 -
gr-atsc/lib/test_atsci.cc | 46 -
gr-atsc/python/atsc/CMakeLists.txt | 63 -
gr-atsc/python/atsc/README | 19 -
gr-atsc/python/atsc/__init__.py | 34 -
gr-atsc/python/atsc/atsc_rx.py | 134 -
gr-atsc/python/atsc/atsc_utils.py | 75 -
gr-atsc/python/atsc/qa_atsc.py | 225 -
gr-atsc/swig/CMakeLists.txt | 59 -
gr-atsc/swig/atsc_swig.i | 301 -
gr-audio/grc/audio_sink.xml | 2 +-
gr-audio/grc/audio_source.xml | 2 +-
gr-audio/lib/portaudio/portaudio_sink.cc | 3 +
gr-audio/lib/portaudio/portaudio_source.cc | 3 +
gr-blocks/grc/blks2_error_rate.xml | 2 +-
gr-blocks/grc/blks2_selector.xml | 2 +-
gr-blocks/grc/blks2_tcp_sink.xml | 2 +-
gr-blocks/grc/blks2_tcp_source.xml | 2 +-
gr-blocks/grc/blks2_valve.xml | 2 +-
gr-blocks/grc/blocks_block_tree.xml | 9 +-
gr-blocks/lib/ConfigChecks.cmake | 2 +-
gr-blocks/lib/udp_source_impl.cc | 3 -
gr-channels/grc/channels_block_tree.xml | 2 +-
gr-channels/lib/fading_model_impl.cc | 11 -
gr-channels/lib/flat_fader_impl.cc | 18 +-
gr-digital/grc/blks2_packet_decoder.xml | 2 +-
gr-digital/grc/blks2_packet_encoder.xml | 2 +-
gr-digital/grc/digital_block_tree.xml | 2 +-
gr-digital/grc/digital_burst_shaper.xml | 2 +-
.../include/gnuradio/digital/ofdm_equalizer_base.h | 3 +-
.../gnuradio/digital/ofdm_equalizer_simpledfe.h | 3 +-
.../gnuradio/digital/ofdm_equalizer_static.h | 3 +-
gr-dtv/grc/dtv_block_tree.xml | 2 +-
gr-dtv/lib/CMakeLists.txt | 19 +-
.../lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc | 5 +-
gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc | 3 +-
gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc | 6 +-
gr-dtv/lib/dvbt/dvbt_reed_solomon.cc | 14 +-
gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc | 24 +-
gr-fcd/AUTHORS | 9 -
gr-fcd/CMakeLists.txt | 134 -
gr-fcd/doc/CMakeLists.txt | 23 -
gr-fcd/doc/README.fcd | 13 -
gr-fcd/doc/fcd.dox | 29 -
gr-fcd/examples/c++/CMakeLists.txt | 37 -
gr-fcd/examples/c++/fcd_nfm_rx.cc | 115 -
gr-fcd/examples/grc/CMakeLists.txt | 26 -
gr-fcd/examples/grc/fcd_apt_rx.grc | 1080 ---
gr-fcd/examples/grc/fcd_fft.grc | 564 --
gr-fcd/examples/grc/fcd_nfm_rx.grc | 1399 ---
gr-fcd/gnuradio-fcd.pc.in | 11 -
gr-fcd/grc/CMakeLists.txt | 24 -
gr-fcd/grc/fcd_source_c.xml | 117 -
gr-fcd/include/gnuradio/fcd/CMakeLists.txt | 28 -
gr-fcd/include/gnuradio/fcd/api.h | 33 -
gr-fcd/include/gnuradio/fcd/source_c.h | 149 -
gr-fcd/lib/CMakeLists.txt | 96 -
gr-fcd/lib/fcd/CMakeLists.txt | 32 -
gr-fcd/lib/fcd/COPYRIGHT | 23 -
gr-fcd/lib/fcd/fcd.c | 895 --
gr-fcd/lib/fcd/fcd.h | 79 -
gr-fcd/lib/fcd/fcdhidcmd.h | 305 -
gr-fcd/lib/gnuradio-fcd.rc.in | 55 -
gr-fcd/lib/hid/CMakeLists.txt | 39 -
gr-fcd/lib/hid/COPYRIGHT | 25 -
gr-fcd/lib/hid/hid-libusb.c | 1427 ---
gr-fcd/lib/hid/hidapi.h | 383 -
gr-fcd/lib/hid/hidmac.c | 1122 ---
gr-fcd/lib/hid/hidwin.c | 873 --
gr-fcd/lib/source_c_impl.cc | 252 -
gr-fcd/lib/source_c_impl.h | 55 -
gr-fcd/python/fcd/CMakeLists.txt | 47 -
gr-fcd/python/fcd/__init__.py | 33 -
gr-fcd/python/fcd/qa_fcd.py | 38 -
gr-fcd/python/fcd/run_tests.in | 10 -
gr-fcd/swig/CMakeLists.txt | 61 -
gr-fcd/swig/fcd_swig.i | 40 -
gr-fec/grc/fec_block_tree.xml | 2 +-
gr-fft/grc/fft_block_tree.xml | 2 +-
gr-filter/grc/filter_block_tree.xml | 2 +-
gr-noaa/CMakeLists.txt | 111 -
gr-noaa/README | 67 -
gr-noaa/examples/CMakeLists.txt | 29 -
gr-noaa/examples/file_rx_hrpt.grc | 1139 ---
gr-noaa/examples/hrpt_decode.grc | 428 -
gr-noaa/examples/hrpt_demod.grc | 963 --
gr-noaa/examples/usrp_rx_hrpt.grc | 2267 -----
gr-noaa/examples/usrp_rx_hrpt_nogui.grc | 1716 ----
gr-noaa/gnuradio-noaa.pc.in | 11 -
gr-noaa/grc/CMakeLists.txt | 26 -
gr-noaa/grc/noaa_hrpt_decoder.xml | 25 -
gr-noaa/grc/noaa_hrpt_deframer.xml | 16 -
gr-noaa/grc/noaa_hrpt_pll_cf.xml | 34 -
gr-noaa/include/gnuradio/noaa/CMakeLists.txt | 31 -
gr-noaa/include/gnuradio/noaa/api.h | 33 -
gr-noaa/include/gnuradio/noaa/hrpt.h | 39 -
gr-noaa/include/gnuradio/noaa/hrpt_decoder.h | 51 -
gr-noaa/include/gnuradio/noaa/hrpt_deframer.h | 51 -
gr-noaa/include/gnuradio/noaa/hrpt_pll_cf.h | 52 -
gr-noaa/lib/CMakeLists.txt | 92 -
gr-noaa/lib/gnuradio-noaa.rc.in | 55 -
gr-noaa/lib/hrpt_decoder_impl.cc | 206 -
gr-noaa/lib/hrpt_decoder_impl.h | 75 -
gr-noaa/lib/hrpt_deframer_impl.cc | 137 -
gr-noaa/lib/hrpt_deframer_impl.h | 58 -
gr-noaa/lib/hrpt_pll_cf_impl.cc | 93 -
gr-noaa/lib/hrpt_pll_cf_impl.h | 56 -
gr-noaa/oct/frames-to-png.sh | 9 -
gr-noaa/oct/frames_to_ppm.m | 85 -
gr-noaa/python/noaa/CMakeLists.txt | 49 -
gr-noaa/python/noaa/__init__.py | 34 -
gr-noaa/python/noaa/qa_noaa.py | 40 -
gr-noaa/swig/CMakeLists.txt | 56 -
gr-noaa/swig/noaa_swig.i | 42 -
gr-pager/grc/pager_flex_deinterleave.xml | 2 +-
gr-pager/grc/pager_flex_sync.xml | 2 +-
gr-pager/grc/pager_slicer_fb.xml | 2 +-
gr-qtgui/grc/qtgui_block_tree.xml | 2 +-
gr-qtgui/lib/CMakeLists.txt | 5 +
gr-trellis/grc/trellis_encoder_xx.xml | 2 +-
gr-trellis/grc/trellis_metrics_x.xml | 2 +-
.../grc/trellis_pccc_decoder_combined_xx.xml | 2 +-
gr-trellis/grc/trellis_pccc_decoder_x.xml | 2 +-
gr-trellis/grc/trellis_pccc_encoder_xx.xml | 2 +-
gr-trellis/grc/trellis_permutation.xml | 2 +-
.../grc/trellis_sccc_decoder_combined_xx.xml | 2 +-
gr-trellis/grc/trellis_sccc_decoder_x.xml | 2 +-
gr-trellis/grc/trellis_sccc_encoder_xx.xml | 2 +-
gr-trellis/grc/trellis_siso_combined_f.xml | 2 +-
gr-trellis/grc/trellis_siso_f.xml | 2 +-
gr-trellis/grc/trellis_viterbi_combined_xx.xml | 2 +-
gr-trellis/grc/trellis_viterbi_x.xml | 2 +-
gr-uhd/grc/gen_uhd_usrp_blocks.py | 92 +-
gr-uhd/grc/uhd_block_tree.xml | 2 +-
gr-uhd/include/gnuradio/uhd/usrp_source.h | 77 +
gr-uhd/lib/usrp_block_impl.h | 8 +
gr-uhd/lib/usrp_sink_impl.cc | 8 +-
gr-uhd/lib/usrp_source_impl.cc | 104 +-
gr-uhd/lib/usrp_source_impl.h | 9 +
gr-uhd/swig/uhd_swig.i | 12 +
gr-utils/CMakeLists.txt | 10 +
gr-utils/python/modtool/__init__.py | 3 +-
gr-utils/python/modtool/code_generator.py | 60 +-
gr-utils/python/modtool/gr-newmod/CMakeLists.txt | 9 +-
.../python/modtool/gr-newmod/lib/CMakeLists.txt | 16 +-
gr-utils/python/modtool/grc_xml_generator.py | 2 +-
gr-utils/python/modtool/modtool_add.py | 37 +-
gr-utils/python/modtool/modtool_rename.py | 3 -
gr-utils/python/modtool/templates.py | 545 +-
gr-utils/python/utils/grcc | 25 +-
gr-video-sdl/grc/video_block_tree.xml | 2 +-
gr-vocoder/grc/vocoder_block_tree.xml | 2 +-
gr-vocoder/lib/codec2/fdmdv.c | 2 +-
gr-wxgui/grc/notebook.xml | 2 +-
gr-wxgui/grc/variable_check_box.xml | 2 +-
gr-wxgui/grc/variable_chooser.xml | 2 +-
gr-wxgui/grc/variable_slider.xml | 2 +-
gr-wxgui/grc/variable_static_text.xml | 2 +-
gr-wxgui/grc/variable_text_box.xml | 2 +-
gr-wxgui/grc/wxgui_constellationsink2.xml | 2 +-
gr-wxgui/grc/wxgui_fftsink2.xml | 2 +-
gr-wxgui/grc/wxgui_histosink2.xml | 2 +-
gr-wxgui/grc/wxgui_numbersink2.xml | 2 +-
gr-wxgui/grc/wxgui_scopesink2.xml | 2 +-
gr-wxgui/grc/wxgui_termsink.xml | 2 +-
gr-wxgui/grc/wxgui_waterfallsink2.xml | 2 +-
gr-zeromq/grc/zeromq_pub_msg_sink.xml | 2 +-
gr-zeromq/grc/zeromq_pub_sink.xml | 2 +-
gr-zeromq/grc/zeromq_pull_msg_source.xml | 2 +-
gr-zeromq/grc/zeromq_pull_source.xml | 2 +-
gr-zeromq/grc/zeromq_push_msg_sink.xml | 2 +-
gr-zeromq/grc/zeromq_push_sink.xml | 2 +-
gr-zeromq/grc/zeromq_rep_msg_sink.xml | 2 +-
gr-zeromq/grc/zeromq_rep_sink.xml | 2 +-
gr-zeromq/grc/zeromq_req_msg_source.xml | 2 +-
gr-zeromq/grc/zeromq_req_source.xml | 2 +-
gr-zeromq/grc/zeromq_sub_msg_source.xml | 2 +-
gr-zeromq/grc/zeromq_sub_source.xml | 2 +-
gr-zeromq/lib/pull_msg_source_impl.cc | 4 +-
gr-zeromq/lib/req_msg_source_impl.cc | 4 +-
gr-zeromq/lib/sub_msg_source_impl.cc | 4 +-
grc/blocks/block_tree.xml | 11 +-
grc/blocks/epy_block.xml | 1 -
grc/blocks/epy_module.xml | 1 -
grc/blocks/options.xml | 6 +-
grc/blocks/parameter.xml | 6 +-
grc/blocks/variable_function_probe.xml | 18 +-
grc/blocks/variable_struct.xml.py | 1 -
grc/core/Block.py | 8 +-
grc/core/Constants.py | 1 +
grc/core/Element.pyi | 54 +
grc/core/Platform.py | 76 +-
grc/core/generator/Generator.py | 35 +-
grc/core/generator/flow_graph.tmpl | 23 +-
grc/core/utils/expr_utils.py | 10 +-
grc/gui/ActionHandler.py | 5 +-
grc/gui/BlockTreeWindow.py | 82 +-
grc/gui/Constants.py | 7 +
grc/main.py | 13 +-
grc/test/.cache/v/cache/lastfailed | 3 +
volk | 2 +-
427 files changed, 1184 insertions(+), 61171 deletions(-)
diff --cc grc/core/Block.py
index ff7f041,8a683a2..9fff5af
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@@ -63,59 -59,92 +63,59 @@@ class Block(Element)
Returns:
block a new block
"""
- # Grab the data
- self._doc = (n.find('doc') or '').strip('\n').replace('\\\n', '')
- self._imports = map(lambda i: i.strip(), n.findall('import'))
- self._make = n.find('make')
- self._var_make = n.find('var_make')
- self._checks = n.findall('check')
- self._callbacks = n.findall('callback')
- self._bus_structure_source = n.find('bus_structure_source') or ''
- self._bus_structure_sink = n.find('bus_structure_sink') or ''
- self.port_counters = [itertools.count(), itertools.count()]
+ Element.__init__(self, parent=flow_graph)
+
+ self._name = n['name']
+ self._key = n['key']
- self._category = n.get('category', '')
++ self.category = [cat.strip() for cat in n.get('category',
'').split('/') if cat.strip()]
+ self._flags = n.get('flags', '')
+ self._doc = n.get('doc', '').strip('\n').replace('\\\n', '')
- # Build the block
- Element.__init__(self, flow_graph)
-
- # Grab the data
- params = n.findall('param')
- sources = n.findall('source')
- sinks = n.findall('sink')
- self._name = n.find('name')
- self._key = n.find('key')
- 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:
+ if n.get('throttle') and BLOCK_FLAG_THROTTLE not in self._flags:
self._flags += BLOCK_FLAG_THROTTLE
- self._grc_source = n.find('grc_source') or ''
- self._block_wrapper_path = n.find('block_wrapper_path')
- self._bussify_sink = n.find('bus_sink')
- self._bussify_source = n.find('bus_source')
- self._var_value = n.find('var_value') or '$value'
+
+ self._imports = [i.strip() for i in n.get('import', [])]
+ self._make = n.get('make')
+ self._var_make = n.get('var_make')
+ self._var_value = n.get('var_value', '$value')
+ self._checks = n.get('check', [])
+ self._callbacks = n.get('callback', [])
+
+ self._grc_source = n.get('grc_source', '')
+ self._block_wrapper_path = n.get('block_wrapper_path')
+
+ params_n = n.get('param', [])
+ sources_n = n.get('source', [])
+ sinks_n = n.get('sink', [])
# Get list of param tabs
- n_tabs = n.find('param_tab_order') or None
- self._param_tab_labels = n_tabs.findall('tab') if n_tabs is not None
else [DEFAULT_PARAM_TAB]
-
- # Create the param objects
- self._params = list()
-
- # Add the id param
- self.get_params().append(self.get_parent().get_parent().Param(
- block=self,
- n=odict({
- 'name': 'ID',
- 'key': 'id',
- 'type': 'id',
- })
- ))
- self.get_params().append(self.get_parent().get_parent().Param(
- block=self,
- n=odict({
- 'name': 'Enabled',
- 'key': '_enabled',
- 'type': 'raw',
- 'value': 'True',
- 'hide': 'all',
- })
- ))
- for param in itertools.imap(lambda n:
self.get_parent().get_parent().Param(block=self, n=n), params):
- key = param.get_key()
- # Test against repeated keys
- if key in self.get_param_keys():
- raise Exception('Key "{}" already exists in
params'.format(key))
- # Store the param
- self.get_params().append(param)
- # Create the source objects
- self._sources = list()
- for source in map(lambda n:
self.get_parent().get_parent().Port(block=self, n=n, dir='source'), sources):
- key = source.get_key()
- # Test against repeated keys
- if key in self.get_source_keys():
- raise Exception('Key "{}" already exists in
sources'.format(key))
- # Store the port
- self.get_sources().append(source)
- self.back_ofthe_bus(self.get_sources())
- # Create the sink objects
- self._sinks = list()
- for sink in map(lambda n:
self.get_parent().get_parent().Port(block=self, n=n, dir='sink'), sinks):
- key = sink.get_key()
- # Test against repeated keys
- if key in self.get_sink_keys():
- raise Exception('Key "{}" already exists in
sinks'.format(key))
- # Store the port
- self.get_sinks().append(sink)
- self.back_ofthe_bus(self.get_sinks())
- self.current_bus_structure = {'source': '', 'sink': ''}
+ self._param_tab_labels = n.get('param_tab_order', {}).get('tab') or
[DEFAULT_PARAM_TAB]
+ self._params = []
+ self._init_params(
+ params_n=params_n,
+ has_sinks=len(sinks_n),
+ has_sources=len(sources_n)
+ )
+
+ self.port_counters = [itertools.count(), itertools.count()]
+ self._sources = self._init_ports(sources_n, direction='source')
+ self._sinks = self._init_ports(sinks_n, direction='sink')
+
+ self._epy_source_hash = -1 # for epy blocks
+ self._epy_reload_error = None
+
+ self._init_bus_ports(n)
+
+ def _add_param(self, key, name, value='', type='raw', **kwargs):
+ n = {'key': key, 'name': name, 'value': value, 'type': type}
+ n.update(kwargs)
+ param = self.parent_platform.Param(block=self, n=n)
+ self._params.append(param)
+
+ def _init_params(self, params_n, has_sources, has_sinks):
+ self._add_param(key='id', name='ID', type='id')
+ self._add_param(key='_enabled', name='Enabled', value='True',
type='raw', hide='all')
# Virtual source/sink and pad source/sink blocks are
# indistinguishable from normal GR blocks. Make explicit
diff --cc grc/core/Platform.py
index 069870d,9b25e67..be7b60c
--- a/grc/core/Platform.py
+++ b/grc/core/Platform.py
@@@ -67,19 -63,19 +67,20 @@@ class Platform(Element)
self._block_dtd = Constants.BLOCK_DTD
self._default_flow_graph = Constants.DEFAULT_FLOW_GRAPH
- # Create a dummy flow graph for the blocks
- self._flow_graph = Element(self)
- self._flow_graph.connections = []
-
- self.blocks = odict()
- self._blocks_n = odict()
+ self.blocks = {}
+ self._blocks_n = {}
- self._category_trees_n = []
+ self._block_categories = {}
self.domains = {}
self.connection_templates = {}
self._auto_hier_block_generate_chain = set()
+ # Create a dummy flow graph for the blocks
+ self._flow_graph = Element.__new__(FlowGraph)
+ Element.__init__(self._flow_graph, self)
+ self._flow_graph.connections = []
- self.load_blocks()
++
+ self.build_block_library()
def __str__(self):
return 'Platform - {}({})'.format(self.config.key, self.config.name)
@@@ -134,13 -130,12 +135,13 @@@
Messages.send('>>> Generate Error: {}: {}\n'.format(file_path,
str(e)))
return False
- self.load_block_xml(generator.get_file_path_xml())
+ self.load_block_xml(generator.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.clear()
self._blocks_n.clear()
@@@ -162,9 -157,21 +163,21 @@@
# print >> sys.stderr, 'Warning: Block validation
failed:\n\t%s\n\tIgnoring: %s' % (e, xml_file)
pass
except Exception as e:
- raise
- print >> sys.stderr, 'Warning: XML parsing
failed:\n\t%r\n\tIgnoring: %s' % (e, xml_file)
+ print('Warning: XML parsing failed:\n\t%r\n\tIgnoring: %s' %
(e, xml_file), file=sys.stderr)
+ # Add blocks to block tree
- for key, block in self.blocks.iteritems():
++ for key, block in six.iteritems(self.blocks):
+ 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()
@@@ -202,8 -209,19 +215,19 @@@
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).get('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'):
++ path.append(cat_n.get('name').strip())
++ for block_key in cat_n.get('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'):
++ for sub_cat_n in cat_n.get('cat', []):
+ load_category(sub_cat_n)
+ path.pop()
+
- load_category(xml.find('cat'))
++ load_category(xml.get('cat', {}))
def load_domain_xml(self, xml_file):
"""Load a domain properties and connection templates from XML"""
@@@ -234,61 -252,23 +258,23 @@@
color = None
self.domains[key] = dict(
- name=n.find('name') or key,
- multiple_sinks=to_bool(n.find('multiple_sinks'), True),
- multiple_sources=to_bool(n.find('multiple_sources'), False),
+ name=n.get('name') or key,
+ multiple_sinks=to_bool(n.get('multiple_sinks'), True),
+ multiple_sources=to_bool(n.get('multiple_sources'), False),
color=color
)
- for connection_n in n.findall('connection'):
- key = (connection_n.find('source_domain'),
connection_n.find('sink_domain'))
+ for connection_n in n.get('connection', []):
+ key = (connection_n.get('source_domain'),
connection_n.get('sink_domain'))
if not all(key):
- print >> sys.stderr, 'Warning: Empty domain key(s) in
connection template.\n\t{}'.format(xml_file)
+ print('Warning: Empty domain key(s) in connection
template.\n\t{}'.format(xml_file), file=sys.stderr)
elif key in self.connection_templates:
- print >> sys.stderr, 'Warning: Connection template "{}"
already exists.\n\t{}'.format(key, xml_file)
+ print('Warning: Connection template "{}" already
exists.\n\t{}'.format(key, xml_file), file=sys.stderr)
else:
- self.connection_templates[key] = connection_n.find('make') or
''
+ self.connection_templates[key] = connection_n.get('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.get('name')]
- block_tree.add_block(parent)
- # Recursive call to load sub categories
- for cat in cat_n.get('cat', []):
- load_category(cat, parent)
- # Add blocks in this category
- for block_key in cat_n.get('block', []):
- if block_key not in self.blocks:
- print('Warning: Block key "{}" not found when loading
category tree.'.format(block_key), file=sys.stderr)
- 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 six.itervalues(self.blocks):
- # 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():
+ for match, docstring in six.iteritems(docstrings):
if not docstring or match.endswith('_sptr'):
continue
docstring = docstring.replace('\n\n', '\n').strip()
diff --cc grc/core/generator/Generator.py
index c3308d6,fb7a3af..9c7d07e
--- a/grc/core/generator/Generator.py
+++ b/grc/core/generator/Generator.py
@@@ -144,16 -141,16 +144,16 @@@ class TopBlockGenerator(object)
pass
return code
- blocks = expr_utils.sort_objects(
+ blocks_all = expr_utils.sort_objects(
- filter(lambda b: b.get_enabled() and not b.get_bypassed(),
fg.blocks),
- lambda b: b.get_id(), _get_block_sort_text
+ [b for b in fg.blocks if b.get_enabled() and not
b.get_bypassed()],
+ operator.methodcaller('get_id'), _get_block_sort_text
)
- deprecated_block_keys = set(block.get_name() for block in blocks if
block.is_deprecated)
- deprecated_block_keys = set(block.get_name() for block in blocks_all
if block.is_deprecated)
++ deprecated_block_keys = set(b.get_name() for b in blocks_all if
b.is_deprecated)
for key in deprecated_block_keys:
Messages.send_warning("The block {!r} is deprecated.".format(key))
# List of regular blocks (all blocks minus the special ones)
- blocks = [b for b in blocks if b not in imports and b not in
parameters]
- blocks = filter(lambda b: b not in (imports + parameters), blocks_all)
++ blocks = [b for b in blocks_all if b not in imports and b not in
parameters]
for block in blocks:
key = block.get_key()
@@@ -265,8 -264,9 +267,9 @@@ class HierBlockGenerator(TopBlockGenera
file_path: where to write the py file (the xml goes into
HIER_BLOCK_LIB_DIR)
"""
TopBlockGenerator.__init__(self, flow_graph, file_path)
- platform = flow_graph.get_parent()
++ platform = flow_graph.parent
- hier_block_lib_dir =
flow_graph.parent_platform.config.hier_block_lib_dir
+ hier_block_lib_dir = platform.config.hier_block_lib_dir
if not os.path.exists(hier_block_lib_dir):
os.mkdir(hier_block_lib_dir)
diff --cc grc/core/utils/expr_utils.py
index 0577f06,2059cef..555bd70
--- a/grc/core/utils/expr_utils.py
+++ b/grc/core/utils/expr_utils.py
@@@ -104,9 -99,9 +104,9 @@@ def expr_replace(expr, replace_dict)
Returns:
a new expression with the prepend
"""
- expr_splits = expr_split(expr)
+ expr_splits = expr_split(expr, var_chars=VAR_CHARS + '.')
for i, es in enumerate(expr_splits):
- if es in replace_dict.keys():
+ if es in list(replace_dict.keys()):
expr_splits[i] = replace_dict[es]
return ''.join(expr_splits)
@@@ -194,8 -189,3 +194,4 @@@ def sort_objects(objects, get_id, get_e
sorted_ids = sort_variables(id2expr)
# Return list of sorted objects
return [id2obj[id] for id in sorted_ids]
+
-
- if __name__ == '__main__':
- for i in sort_variables({'x': '1', 'y': 'x+1', 'a': 'x+y', 'b': 'y+1',
'c': 'a+b+x+y'}):
- print(i)
diff --cc grc/gui/BlockTreeWindow.py
index 26086f5,f49eb6c..89aac53
--- a/grc/gui/BlockTreeWindow.py
+++ b/grc/gui/BlockTreeWindow.py
@@@ -17,48 -17,71 +17,61 @@@ along with this program; if not, write
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
+from __future__ import absolute_import
+import six
+
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
from . import Actions, Utils
- from .Constants import DEFAULT_BLOCKS_WINDOW_WIDTH, DND_TARGETS
+ from . import Constants
+
-NAME_INDEX = 0
-KEY_INDEX = 1
-DOC_INDEX = 2
-
-DOC_MARKUP_TMPL = """\
-#set $docs = []
-#if $doc.get('')
- #set $docs += $doc.pop('').splitlines() + ['']
-#end if
-#for b, d in $doc.iteritems()
- #set $docs += ['--- {0} ---'.format(b)] + d.splitlines() + ['']
-#end for
-#set $len_out = 0
-#for $n, $line in $enumerate($docs[:-1])
-#if $n
-
-#end if
-$encode($line)#slurp
-#set $len_out += $len($line)
-#if $n > 10 or $len_out > 500
-
-...#slurp
-#break
-#end if
-#end for
-#if $len_out == 0
-undocumented#slurp
-#end if"""
-
-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):
+NAME_INDEX, KEY_INDEX, DOC_INDEX = range(3)
+
+
+def _format_doc(doc):
+ docs = []
+ if doc.get(''):
+ docs += doc.pop('').splitlines() + ['']
+ for block_name, docstring in six.iteritems(doc):
+ docs.append('--- {0} ---'.format(block_name))
+ docs += docstring.splitlines()
+ docs.append('')
+ out = ''
+ for n, line in enumerate(docs[:-1]):
+ if n:
+ out += '\n'
+ out += Utils.encode(line)
+ if n > 10 or len(out) > 500:
+ out += '\n...'
+ break
+ return out or 'undocumented'
+
+
++def _format_cat_tooltip(category):
++ tooltip = '{}: {}'.format('Category' if len(category) > 1 else 'Module',
category[-1])
++
++ if category == ('Core',):
++ tooltip += '\n\nThis subtree is meant for blocks included with GNU
Radio (in-tree).'
++
++ elif category == (Constants.DEFAULT_BLOCK_MODULE_NAME,):
++ tooltip += '\n\n' + Constants.DEFAULT_BLOCK_MODULE_TOOLTIP
++
++ return tooltip
++
++
+class BlockTreeWindow(Gtk.VBox):
"""The block selection panel."""
- def __init__(self, platform, get_flow_graph):
+ __gsignals__ = {
+ 'create_new_block': (GObject.SIGNAL_RUN_FIRST, None, (str,))
+ }
+
+ def __init__(self, platform):
"""
BlockTreeWindow constructor.
Create a tree view of the possible blocks in the platform.
@@@ -96,37 -121,49 +109,45 @@@
self.treeview.connect('button-press-event',
self._handle_mouse_button_press)
self.treeview.connect('key-press-event',
self._handle_search_key_press)
- self.treeview.get_selection().set_mode('single')
- renderer = gtk.CellRendererText()
- column = gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX)
+ self.treeview.get_selection().set_mode(Gtk.SelectionMode.SINGLE)
+ renderer = Gtk.CellRendererText()
+ column = Gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX)
self.treeview.append_column(column)
-- # try to enable the tooltips (available in pygtk 2.12 and above)
-- try:
-- self.treeview.set_tooltip_column(DOC_INDEX)
-- except:
-- pass
++ self.treeview.set_tooltip_column(DOC_INDEX)
# setup sort order
column.set_sort_column_id(0)
- self.treestore.set_sort_column_id(0, gtk.SORT_ASCENDING)
+ self.treestore.set_sort_column_id(0, Gtk.SortType.ASCENDING)
# setup drag and drop
- self.treeview.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK,
DND_TARGETS, Gdk.DragAction.COPY)
- self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
Constants.DND_TARGETS, gtk.gdk.ACTION_COPY)
++ self.treeview.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK,
Constants.DND_TARGETS, Gdk.DragAction.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 = Gtk.ScrolledWindow()
+ scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
Gtk.PolicyType.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)
+ self.pack_start(scrolled_window, True, True, 0)
# 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():
++ for block in six.itervalues(self.platform.blocks):
+ 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
@@@ -137,29 -174,25 +158,23 @@@
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
-
- if isinstance(category, (str, six.text_type)):
- category = category.split('/')
- category = tuple(x for x in category if x) # tuple is hashable
+ treestore = treestore or self.treestore
+ categories = categories or self._categories
+
+ category = tuple(filter(str, block.category)) # tuple is hashable,
remove empty cats
+
# 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, 'Category: ' +
Utils.encode(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))
++ treestore.set_value(iter_, DOC_INDEX,
_format_cat_tooltip(parent_cat_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())
@@@ -212,10 -256,10 +227,10 @@@
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())
+ matching_blocks = [b for b in list(self.platform.blocks.values())
+ if key in b.get_key().lower() or key in
b.get_name().lower()]
self.treestore_search.clear()
self._categories_search = {tuple(): None}
diff --cc grc/gui/Constants.py
index 8bb15ac,022564c..035a7f8
--- a/grc/gui/Constants.py
+++ b/grc/gui/Constants.py
@@@ -96,6 -96,6 +96,13 @@@ SCROLL_DISTANCE = 1
# How close the mouse click can be to a line and register a connection select.
LINE_SELECT_SENSITIVITY = 5
++DEFAULT_BLOCK_MODULE_TOOLTIP = """\
++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."""
++
def update_font_size(font_size):
global PORT_SEPARATION, BLOCK_FONT, PORT_FONT, PARAM_FONT, FONT_SIZE
diff --cc grc/main.py
index 810ac7c,0edab40..ff0811e
--- a/grc/main.py
+++ b/grc/main.py
@@@ -15,13 -15,9 +15,12 @@@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA
- from __future__ import absolute_import
- import optparse
+ import argparse
-import gtk
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
from gnuradio import gr
from .gui.Platform import Platform
@@@ -38,13 -34,13 +37,13 @@@ This is free software, and you are welc
def main():
- parser = optparse.OptionParser(
- usage='usage: %prog [options] [saved flow graphs]',
- version=VERSION_AND_DISCLAIMER_TEMPLATE % gr.version())
- options, args = parser.parse_args()
+ parser = argparse.ArgumentParser(
+ description=VERSION_AND_DISCLAIMER_TEMPLATE % gr.version())
+ parser.add_argument('flow_graphs', nargs='*')
+ args = parser.parse_args()
try:
- gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc',
256, 0))
+ Gtk.window_set_default_icon(Gtk.IconTheme().load_icon('gnuradio-grc',
256, 0))
except:
pass
@@@ -54,6 -50,6 +53,6 @@@
version_parts=(gr.major_version(), gr.api_version(),
gr.minor_version()),
install_prefix=gr.prefix()
)
- ActionHandler(args, platform)
+ ActionHandler(args.flow_graphs, platform)
- gtk.main()
+ Gtk.main()
- [Commit-gnuradio] [gnuradio] 02/101: gtk3: add flowgraph draw code and other gtk3 fixes (WIP), (continued)
- [Commit-gnuradio] [gnuradio] 02/101: gtk3: add flowgraph draw code and other gtk3 fixes (WIP), git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 21/101: grc-refactor: Block: remove key getters, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 31/101: grc: gtk3: refactor connection draw code, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 14/101: grc-refactor: rewrite tree-api in core, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 42/101: grc: gtk3: update main and checks, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 27/101: grc: gtk3: refactor and update draw code WIP, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 33/101: grc: gtk3: update block surface draw code, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 45/101: grc: fix block init, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 38/101: grc: gtk3: update & fix port drawing code, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 32/101: grc: refactor: remote port domain getter, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 16/101: Merge remote-tracking branch 'grcwg/next_grcwg' into gtk3,
git <=
- [Commit-gnuradio] [gnuradio] 57/101: grc: gtk3: remove left-over gtk2 usage in generator template, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 43/101: grc: refactor: minor clean-up and fixes, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 44/101: grc: gtk3: fix connection arrows, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 56/101: grc: gtk3: fix generating virtual/bypassed connections, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 46/101: grc: dynamic super-classing proof-of-concept =), git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 53/101: grc: make dummy blocks a block subclass, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 68/101: grc: add error messages iterator, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 64/101: grc: gtk3: better lables/shapes handling during flowgraph update, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 62/101: grc: refactor: handle flowgraph and connection super init same as in block, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 65/101: grc: gtk3: dashed lines for message connections, thicker ones for custom domains, git, 2017/03/16