From 6cd8e365b7e519f49c81cfeb7137200d7b5e8b2f Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Tue, 21 Jun 2016 19:27:19 +0200 Subject: [PATCH 12/22] grc: Fix generation of Python code for Qt4 and Qt5 Signed-off-by: Paul Cercueil --- CMakeLists.txt | 2 +- grc/blocks/CMakeLists.txt | 4 +++- grc/blocks/{options.xml => options.xml.cmakein} | 2 +- grc/core/generator/flow_graph.tmpl | 13 ++++++++++++- 4 files changed, 17 insertions(+), 4 deletions(-) rename grc/blocks/{options.xml => options.xml.cmakein} (99%) --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -528,7 +528,6 @@ add_subdirectory(docs) add_subdirectory(gnuradio-runtime) add_subdirectory(gr-blocks) -add_subdirectory(grc) add_subdirectory(gr-fec) add_subdirectory(gr-fft) add_subdirectory(gr-filter) @@ -551,6 +550,7 @@ add_subdirectory(gr-wavelet) add_subdirectory(gr-wxgui) add_subdirectory(gr-zeromq) +add_subdirectory(grc) # Defining GR_CTRLPORT for gnuradio/config.h if(ENABLE_GR_CTRLPORT) --- a/grc/blocks/CMakeLists.txt +++ b/grc/blocks/CMakeLists.txt @@ -22,6 +22,8 @@ file(GLOB xml_files "*.xml") +configure_file(options.xml.cmakein "${CMAKE_CURRENT_BINARY_DIR}/options.xml" @ONLY) + macro(GEN_BLOCK_XML _generator _xml_block) set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator}) set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}) @@ -37,7 +39,7 @@ add_custom_target(grc_generated_xml ALL DEPENDS ${generated_xml_files}) install( - FILES ${xml_files} ${generated_xml_files} + FILES ${xml_files} "${CMAKE_CURRENT_BINARY_DIR}/options.xml" ${generated_xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "grc" ) --- a/grc/blocks/options.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - - Options - options - from gnuradio import gr - from gnuradio.filter import firdes - #if $generate_options() == 'wx_gui' -from grc_gnuradio import wxgui as grc_wxgui -import wx -#end if -#if $generate_options() == 'qt_gui' -from PyQt5 import Qt -import sys -#end if -#if $generate_options() == 'bokeh_gui' -import time -import signal -import functools -from bokeh.client import push_session -from bokeh.plotting import curdoc -#end if -#if not $generate_options().startswith('hb') -from optparse import OptionParser -from gnuradio.eng_option import eng_option -from gnuradio import eng_notation -#end if - - if $run: self.start() -else: self.stop(); self.wait() - - Title - title - - string - #if $title() then 'none' else 'part'# - - - Author - author - - string - #if $author() then 'none' else 'part'# - - - Description - description - - string - #if $description() then 'none' else 'part'# - - - Canvas Size - window_size - - int_vector - part - - - Generate Options - generate_options - qt_gui - enum - - - - - - - - - Category - category - [GRC Hier Blocks] - string - #if $generate_options().startswith('hb') then 'none' else 'all'# - - - Run Options - run_options - prompt - enum - #if $generate_options() == 'no_gui' then 'none' else 'all'# - - - - - Widget Placement - placement - (0,0) - int_vector - #if $generate_options() == 'bokeh_gui' then 'part' else 'all'# - - - Sizing Mode - sizing_mode - fixed - enum - #if $generate_options() == 'bokeh_gui' then 'part' else 'all'# - - - - - - - - Run - run - True - bool - -#if $generate_options() in ('qt_gui', 'wx_gui', 'bokeh_gui') - #if $run() - part - #else - none - #end if -#else - all -#end if - - - - - - Max Number of Output - max_nouts - 0 - int - #if $generate_options().startswith('hb') -all#slurp -#elif $max_nouts() -none#slurp -#else -part#slurp -#end if - - - Realtime Scheduling - realtime_scheduling - - enum - #if $generate_options().startswith('hb') -all#slurp -#elif $realtime_scheduling() -none#slurp -#else -part#slurp -#end if - - - - - QSS Theme - qt_qss_theme - - file_open - -#if $generate_options() in ('qt_gui',) - #if $qt_qss_theme() - none - #else - part - #end if -#else - all -#end if - - - - Thread-safe setters - thread_safe_setters - - enum - part - - - Advanced - - - Run Command - run_command - {python} -u {filename} - string - #if $generate_options().startswith('hb') -all#slurp -#else -part#slurp -#end if - Advanced - - - Hier Block Source Path - hier_block_src_path - .: - string - part - Advanced - - not $window_size or len($window_size) == 2 - not $window_size or 300 <= $(window_size)[0] <= 4096 - not $window_size or 300 <= $(window_size)[1] <= 4096 - len($placement) == 4 or len($placement) == 2 - all(i >= 0 for i in $(placement)) - -The options block sets special parameters for the flow graph. \ -Only one option block is allowed per flow graph. - -Title, author, and description parameters are for identification purposes. - -The window size controls the dimensions of the flow graph editor. \ -The window size (width, height) must be between (300, 300) and (4096, 4096). - -The generate options controls the type of code generated. \ -Non-graphical flow graphs should avoid using graphical sinks or graphical variable controls. - -In a graphical application, \ -run can be controlled by a variable to start and stop the flowgraph at runtime. - -The id of this block determines the name of the generated file and the name of the class. \ -For example, an id of my_block will generate the file my_block.py and class my_block(gr.... - -The category parameter determines the placement of the block in the block selection window. \ -The category only applies when creating hier blocks. \ -To put hier blocks into the root category, enter / for the category. - -The Max Number of Output is the maximum number of output items allowed for any block \ -in the flowgraph; to disable this set the max_nouts equal to 0.\ -Use this to adjust the maximum latency a flowgraph can exhibit. - - --- /dev/null +++ b/grc/blocks/options.xml.cmakein @@ -0,0 +1,294 @@ + + + + Options + options + from gnuradio import gr + from gnuradio.filter import firdes + #if $generate_options() == 'wx_gui' +from grc_gnuradio import wxgui as grc_wxgui +import wx +#end if +#if $generate_options() == 'qt_gui' +from PyQt@DESIRED_QT_VERSION@ import Qt +import sys +#end if +#if $generate_options() == 'bokeh_gui' +import time +import signal +import functools +from bokeh.client import push_session +from bokeh.plotting import curdoc +#end if +#if not $generate_options().startswith('hb') +from optparse import OptionParser +from gnuradio.eng_option import eng_option +from gnuradio import eng_notation +#end if + + if $run: self.start() +else: self.stop(); self.wait() + + Title + title + + string + #if $title() then 'none' else 'part'# + + + Author + author + + string + #if $author() then 'none' else 'part'# + + + Description + description + + string + #if $description() then 'none' else 'part'# + + + Canvas Size + window_size + + int_vector + part + + + Generate Options + generate_options + qt_gui + enum + + + + + + + + + Category + category + [GRC Hier Blocks] + string + #if $generate_options().startswith('hb') then 'none' else 'all'# + + + Run Options + run_options + prompt + enum + #if $generate_options() == 'no_gui' then 'none' else 'all'# + + + + + Widget Placement + placement + (0,0) + int_vector + #if $generate_options() == 'bokeh_gui' then 'part' else 'all'# + + + Sizing Mode + sizing_mode + fixed + enum + #if $generate_options() == 'bokeh_gui' then 'part' else 'all'# + + + + + + + + Run + run + True + bool + +#if $generate_options() in ('qt_gui', 'wx_gui', 'bokeh_gui') + #if $run() + part + #else + none + #end if +#else + all +#end if + + + + + + Max Number of Output + max_nouts + 0 + int + #if $generate_options().startswith('hb') +all#slurp +#elif $max_nouts() +none#slurp +#else +part#slurp +#end if + + + Realtime Scheduling + realtime_scheduling + + enum + #if $generate_options().startswith('hb') +all#slurp +#elif $realtime_scheduling() +none#slurp +#else +part#slurp +#end if + + + + + QSS Theme + qt_qss_theme + + file_open + +#if $generate_options() in ('qt_gui',) + #if $qt_qss_theme() + none + #else + part + #end if +#else + all +#end if + + + + Thread-safe setters + thread_safe_setters + + enum + part + + + Advanced + + + Run Command + run_command + {python} -u {filename} + string + #if $generate_options().startswith('hb') +all#slurp +#else +part#slurp +#end if + Advanced + + + Hier Block Source Path + hier_block_src_path + .: + string + part + Advanced + + not $window_size or len($window_size) == 2 + not $window_size or 300 <= $(window_size)[0] <= 4096 + not $window_size or 300 <= $(window_size)[1] <= 4096 + len($placement) == 4 or len($placement) == 2 + all(i >= 0 for i in $(placement)) + +The options block sets special parameters for the flow graph. \ +Only one option block is allowed per flow graph. + +Title, author, and description parameters are for identification purposes. + +The window size controls the dimensions of the flow graph editor. \ +The window size (width, height) must be between (300, 300) and (4096, 4096). + +The generate options controls the type of code generated. \ +Non-graphical flow graphs should avoid using graphical sinks or graphical variable controls. + +In a graphical application, \ +run can be controlled by a variable to start and stop the flowgraph at runtime. + +The id of this block determines the name of the generated file and the name of the class. \ +For example, an id of my_block will generate the file my_block.py and class my_block(gr.... + +The category parameter determines the placement of the block in the block selection window. \ +The category only applies when creating hier blocks. \ +To put hier blocks into the root category, enter / for the category. + +The Max Number of Output is the maximum number of output items allowed for any block \ +in the flowgraph; to disable this set the max_nouts equal to 0.\ +Use this to adjust the maximum latency a flowgraph can exhibit. + + --- a/grc/core/generator/flow_graph.tmpl +++ b/grc/core/generator/flow_graph.tmpl @@ -36,6 +36,10 @@ import threading #end if +#if $generate_options == 'qt_gui' +from distutils.version import StrictVersion +#end if + ## Call XInitThreads as the _very_ first thing. ## After some Qt import, it's too late #if $generate_options in ('wx_gui', 'qt_gui', 'bokeh_gui')