diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-08-09 21:15:56 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-08-09 21:18:29 +0200 |
commit | 8e2886dc6b45b4e3f68d84887f728483fd2d1538 (patch) | |
tree | e682bbea9e329c80ebc66233d58a01a1306bddbd /grc | |
parent | cbe1e43b0f0d1ee0d356b7110700400578855ac6 (diff) | |
parent | fc1a6a88483120921936e415aba4d5d1a9b42d96 (diff) |
Merge remote-tracking branch 'upstream/next' into gtk3
Diffstat (limited to 'grc')
-rw-r--r-- | grc/CMakeLists.txt | 24 | ||||
-rw-r--r-- | grc/blocks/CMakeLists.txt | 1 | ||||
-rwxr-xr-x | grc/checks.py | 83 | ||||
-rw-r--r-- | grc/core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | grc/core/Config.py | 13 | ||||
-rw-r--r-- | grc/core/Constants.py | 1 | ||||
-rw-r--r-- | grc/core/Param.py | 6 | ||||
-rw-r--r-- | grc/core/Platform.py | 9 | ||||
-rw-r--r-- | grc/core/generator/CMakeLists.txt | 2 | ||||
-rw-r--r-- | grc/core/generator/Generator.py | 3 | ||||
-rw-r--r-- | grc/core/utils/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/grc.conf.in | 1 | ||||
-rw-r--r-- | grc/gui/ActionHandler.py | 15 | ||||
-rw-r--r-- | grc/gui/BlockTreeWindow.py | 4 | ||||
-rw-r--r-- | grc/gui/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/gui/Preferences.py | 4 | ||||
-rw-r--r-- | grc/scripts/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/scripts/freedesktop/CMakeLists.txt | 3 | ||||
-rwxr-xr-x | grc/scripts/gnuradio-companion | 88 |
19 files changed, 106 insertions, 156 deletions
diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt index 4c782a7f7d..eed5202657 100644 --- a/grc/CMakeLists.txt +++ b/grc/CMakeLists.txt @@ -54,16 +54,6 @@ GR_REGISTER_COMPONENT("gnuradio-companion" ENABLE_GRC if(ENABLE_GRC) ######################################################################## -# Setup CPack components -######################################################################## -include(GrPackage) -CPACK_COMPONENT("grc" - DISPLAY_NAME "GNU Radio Companion" - DESCRIPTION "Graphical flow graph designer" - DEPENDS "runtime_python" -) - -######################################################################## # Create and install the grc conf file ######################################################################## file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${GRC_BLOCKS_DIR} blocksdir) @@ -93,7 +83,6 @@ configure_file( install( FILES ${CMAKE_CURRENT_BINARY_DIR}/grc.conf DESTINATION ${GR_PREFSDIR} - COMPONENT "grc" ) file(GLOB py_files "*.py") @@ -101,7 +90,6 @@ file(GLOB py_files "*.py") GR_PYTHON_INSTALL( FILES ${py_files} DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc - COMPONENT "grc" ) ######################################################################## @@ -118,18 +106,6 @@ string(REPLACE "\\" "\\\\" GRC_BLOCKS_PATH ${GRC_BLOCKS_PATH}) file(TO_NATIVE_PATH ${GR_PYTHON_DIR} GR_PYTHON_POSTFIX) string(REPLACE "\\" "\\\\" GR_PYTHON_POSTFIX ${GR_PYTHON_POSTFIX}) -CPACK_SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} - #!include \\\"winmessages.nsh\\\" - WriteRegStr HKLM ${HLKM_ENV} \\\"GRC_BLOCKS_PATH\\\" \\\"$INSTDIR\\\\${GRC_BLOCKS_PATH}\\\" - SendMessage \\\${HWND_BROADCAST} \\\${WM_WININICHANGE} 0 \\\"STR:Environment\\\" /TIMEOUT=5000 -") - -CPACK_SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} - #!include \\\"winmessages.nsh\\\" - DeleteRegValue HKLM ${HLKM_ENV} \\\"GRC_BLOCKS_PATH\\\" - SendMessage \\\${HWND_BROADCAST} \\\${WM_WININICHANGE} 0 \\\"STR:Environment\\\" /TIMEOUT=5000 -") - endif(WIN32) ######################################################################## diff --git a/grc/blocks/CMakeLists.txt b/grc/blocks/CMakeLists.txt index 0c2a1f7901..eaa57970a6 100644 --- a/grc/blocks/CMakeLists.txt +++ b/grc/blocks/CMakeLists.txt @@ -39,5 +39,4 @@ add_custom_target(grc_generated_xml ALL DEPENDS ${generated_xml_files}) install( FILES ${xml_files} ${generated_xml_files} DESTINATION ${GRC_BLOCKS_DIR} - COMPONENT "grc" ) diff --git a/grc/checks.py b/grc/checks.py deleted file mode 100755 index 4b5ce9d316..0000000000 --- a/grc/checks.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2009-2016 Free Software Foundation, Inc. -# This file is part of GNU Radio -# -# GNU Radio Companion is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# GNU Radio Companion is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with 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 os -import warnings - - -GR_IMPORT_ERROR_MESSAGE = """\ -Cannot import gnuradio. - -Is the model path environment variable set correctly? - All OS: PYTHONPATH - -Is the library path environment variable set correctly? - Linux: LD_LIBRARY_PATH - Windows: PATH - MacOSX: DYLD_LIBRARY_PATH -""" - - -def die(error, message): - msg = "{0}\n\n({1})".format(message, error) - try: - from gi.repository import Gtk - d = Gtk.MessageDialog( - message_type=Gtk.MessageType.ERROR, - buttons=Gtk.ButtonsType.CLOSE, - text=msg, - ) - d.set_title(type(error).__name__) - d.run() - exit(1) - except ImportError: - exit(type(error).__name__ + '\n\n' + msg) - - -def check_gtk(): - try: - warnings.filterwarnings("error") - import gi - gi.require_version('Gtk', '3.0') - gi.require_version('PangoCairo', '1.0') - - from gi.repository import Gtk - Gtk.init_check() - warnings.filterwarnings("always") - except Exception as err: - die(err, "Failed to initialize GTK. If you are running over ssh, " - "did you enable X forwarding and start ssh with -X?") - - -def check_gnuradio_import(): - try: - from gnuradio import gr - except ImportError as err: - die(err, GR_IMPORT_ERROR_MESSAGE) - - -def check_blocks_path(): - if 'GR_DONT_LOAD_PREFS' in os.environ and not os.environ.get('GRC_BLOCKS_PATH', ''): - die(EnvironmentError("No block definitions available"), - "Can't find block definitions. Use config.conf or GRC_BLOCKS_PATH.") - - -def do_all(): - check_gnuradio_import() - check_gtk() - check_blocks_path() diff --git a/grc/core/CMakeLists.txt b/grc/core/CMakeLists.txt index 51b0dacba6..f340127873 100644 --- a/grc/core/CMakeLists.txt +++ b/grc/core/CMakeLists.txt @@ -22,7 +22,6 @@ file(GLOB py_files "*.py") GR_PYTHON_INSTALL( FILES ${py_files} DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/core - COMPONENT "grc" ) file(GLOB dtd_files "*.dtd") @@ -30,7 +29,6 @@ file(GLOB dtd_files "*.dtd") install( FILES ${dtd_files} default_flow_graph.grc DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/core - COMPONENT "grc" ) add_subdirectory(generator) diff --git a/grc/core/Config.py b/grc/core/Config.py index 400d5d365f..b65a421b7a 100644 --- a/grc/core/Config.py +++ b/grc/core/Config.py @@ -21,6 +21,8 @@ from __future__ import absolute_import import os from os.path import expanduser, normpath, expandvars, exists +from . import Constants + class Config(object): @@ -29,7 +31,7 @@ class Config(object): license = __doc__.strip() website = 'http://gnuradio.org' - hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', expanduser('~/.grc_gnuradio')) + hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', Constants.DEFAULT_HIER_BLOCK_LIB_DIR) def __init__(self, prefs_file, version, version_parts=None): self.prefs = prefs_file @@ -54,3 +56,12 @@ class Config(object): for path in collected_paths if exists(path)] return valid_paths + + @property + def default_flow_graph(self): + user_default = ( + os.environ.get('GRC_DEFAULT_FLOW_GRAPH') or + self.prefs.get_string('grc', 'default_flow_graph', '') or + os.path.join(self.hier_block_lib_dir, 'default_flow_graph.grc') + ) + return user_default if exists(user_default) else Constants.DEFAULT_FLOW_GRAPH diff --git a/grc/core/Constants.py b/grc/core/Constants.py index 13e29cb533..394150529b 100644 --- a/grc/core/Constants.py +++ b/grc/core/Constants.py @@ -31,6 +31,7 @@ FLOW_GRAPH_DTD = os.path.join(DATA_DIR, 'flow_graph.dtd') BLOCK_TREE_DTD = os.path.join(DATA_DIR, 'block_tree.dtd') BLOCK_DTD = os.path.join(DATA_DIR, 'block.dtd') DEFAULT_FLOW_GRAPH = os.path.join(DATA_DIR, 'default_flow_graph.grc') +DEFAULT_HIER_BLOCK_LIB_DIR = os.path.expanduser('~/.grc_gnuradio') DOMAIN_DTD = os.path.join(DATA_DIR, 'domain.dtd') # File format versions: diff --git a/grc/core/Param.py b/grc/core/Param.py index 5ac1745f95..6d947c3615 100644 --- a/grc/core/Param.py +++ b/grc/core/Param.py @@ -443,10 +443,8 @@ class Param(Element): if t in ('string', 'file_open', 'file_save', '_multiline', '_multiline_python_external'): if not self._init: self.evaluate() - if self._stringify_flag: - return '"%s"' % v.replace('"', '\"') - else: - return v + return repr(v) if self._stringify_flag else v + # Vector types elif t in ('complex_vector', 'real_vector', 'float_vector', 'int_vector'): if not self._init: diff --git a/grc/core/Platform.py b/grc/core/Platform.py index 9956391055..7ef944b3aa 100644 --- a/grc/core/Platform.py +++ b/grc/core/Platform.py @@ -56,9 +56,6 @@ class Platform(Element): callback_finished=lambda: self.block_docstrings_loaded_callback() ) - self._block_dtd = Constants.BLOCK_DTD - self._default_flow_graph = Constants.DEFAULT_FLOW_GRAPH - self.blocks = {} self._blocks_n = {} self._block_categories = {} @@ -187,7 +184,7 @@ class Platform(Element): def load_block_xml(self, xml_file): """Load block description from xml file""" # Validate and import - ParseXML.validate_dtd(xml_file, self._block_dtd) + ParseXML.validate_dtd(xml_file, Constants.BLOCK_DTD) n = ParseXML.from_file(xml_file).get('block', {}) n['block_wrapper_path'] = xml_file # inject block wrapper path key = n.pop('key') @@ -291,8 +288,8 @@ class Platform(Element): nested data @throws exception if the validation fails """ - flow_graph_file = flow_graph_file or self._default_flow_graph - open(flow_graph_file, 'r') # Test open + flow_graph_file = flow_graph_file or self.config.default_flow_graph + open(flow_graph_file, 'r').close() # Test open ParseXML.validate_dtd(flow_graph_file, Constants.FLOW_GRAPH_DTD) return ParseXML.from_file(flow_graph_file) diff --git a/grc/core/generator/CMakeLists.txt b/grc/core/generator/CMakeLists.txt index 4bdd59a7a2..492ad7c4ad 100644 --- a/grc/core/generator/CMakeLists.txt +++ b/grc/core/generator/CMakeLists.txt @@ -22,11 +22,9 @@ file(GLOB py_files "*.py") GR_PYTHON_INSTALL( FILES ${py_files} DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/core/generator - COMPONENT "grc" ) install(FILES flow_graph.tmpl DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/core/generator - COMPONENT "grc" ) diff --git a/grc/core/generator/Generator.py b/grc/core/generator/Generator.py index a9ce933aeb..f042b4963c 100644 --- a/grc/core/generator/Generator.py +++ b/grc/core/generator/Generator.py @@ -79,13 +79,14 @@ class TopBlockGenerator(object): self._flow_graph = FlowGraphProxy(flow_graph) self._generate_options = self._flow_graph.get_option('generate_options') self._mode = TOP_BLOCK_FILE_MODE - dirname = self._dirname = os.path.dirname(file_path) + dirname = os.path.dirname(file_path) # Handle the case where the directory is read-only # In this case, use the system's temp directory if not os.access(dirname, os.W_OK): dirname = tempfile.gettempdir() filename = self._flow_graph.get_option('id') + '.py' self.file_path = os.path.join(dirname, filename) + self._dirname = dirname def write(self): """generate output and write it to files""" diff --git a/grc/core/utils/CMakeLists.txt b/grc/core/utils/CMakeLists.txt index 2528fbc43c..3ba65258a5 100644 --- a/grc/core/utils/CMakeLists.txt +++ b/grc/core/utils/CMakeLists.txt @@ -22,5 +22,4 @@ file(GLOB py_files "*.py") GR_PYTHON_INSTALL( FILES ${py_files} DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/core/utils - COMPONENT "grc" ) diff --git a/grc/grc.conf.in b/grc/grc.conf.in index 71c4f63bca..1dbb13bfaa 100644 --- a/grc/grc.conf.in +++ b/grc/grc.conf.in @@ -5,6 +5,7 @@ [grc] global_blocks_path = @blocksdir@ local_blocks_path = +default_flow_graph = xterm_executable = @GRC_XTERM_EXE@ canvas_font_size = 8 canvas_default_size = 1280, 1024 diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py index 9e57565772..ca16a7e7fd 100644 --- a/grc/gui/ActionHandler.py +++ b/grc/gui/ActionHandler.py @@ -63,7 +63,7 @@ class ActionHandler: Messages.register_messenger(self.main_window.add_console_line) Messages.send_init(platform) #initialize - self.init_file_paths = file_paths + self.init_file_paths = [os.path.abspath(file_path) for file_path in file_paths] self.init = False Actions.APPLICATION_INITIALIZE() @@ -112,14 +112,11 @@ class ActionHandler: # Initialize/Quit ################################################## if action == Actions.APPLICATION_INITIALIZE: - if not self.init_file_paths: - self.init_file_paths = list(filter(os.path.exists, Preferences.get_open_files())) - if not self.init_file_paths: self.init_file_paths = [''] - for file_path in self.init_file_paths: - if file_path: main.new_page(file_path) #load pages from file paths - if Preferences.file_open() in self.init_file_paths: - main.new_page(Preferences.file_open(), show=True) - if not self.main_window.current_page: + file_path_to_show = Preferences.file_open() + for file_path in (self.init_file_paths or Preferences.get_open_files()): + if os.path.exists(file_path): + main.new_page(file_path, show=file_path_to_show == file_path) + if not main.current_page: main.new_page() # ensure that at least a blank page exists main.btwin.search_entry.hide() diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py index 90d4b561b7..8504200459 100644 --- a/grc/gui/BlockTreeWindow.py +++ b/grc/gui/BlockTreeWindow.py @@ -179,9 +179,9 @@ class BlockTreeWindow(Gtk.VBox): """Update the documentation column of every block""" def update_doc(model, _, iter_): - if model.iter_has_child(iter_): - return # category node, no doc string key = model.get_value(iter_, KEY_INDEX) + if not key: + return # category node, no doc string block = self.platform.blocks[key] model.set_value(iter_, DOC_INDEX, _format_doc(block.documentation)) diff --git a/grc/gui/CMakeLists.txt b/grc/gui/CMakeLists.txt index aa9592b351..12be4a8151 100644 --- a/grc/gui/CMakeLists.txt +++ b/grc/gui/CMakeLists.txt @@ -22,5 +22,4 @@ file(GLOB py_files "*.py") GR_PYTHON_INSTALL( FILES ${py_files} DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/gui - COMPONENT "grc" ) diff --git a/grc/gui/Preferences.py b/grc/gui/Preferences.py index 8756a7ab23..d917537971 100644 --- a/grc/gui/Preferences.py +++ b/grc/gui/Preferences.py @@ -77,7 +77,7 @@ def entry(key, value=None, default=None): }.get(_type, _config_parser.get) try: result = getter('main', key) - except configparser.Error: + except (AttributeError, configparser.Error): result = _type() if default is None else default return result @@ -109,7 +109,7 @@ def get_file_list(key): try: files = [value for name, value in _config_parser.items(key) if name.startswith('%s_' % key)] - except configparser.Error: + except (AttributeError, configparser.Error): files = [] return files diff --git a/grc/scripts/CMakeLists.txt b/grc/scripts/CMakeLists.txt index 6cc78c3cf3..9751952118 100644 --- a/grc/scripts/CMakeLists.txt +++ b/grc/scripts/CMakeLists.txt @@ -21,7 +21,6 @@ GR_PYTHON_INSTALL( PROGRAMS gnuradio-companion DESTINATION ${GR_RUNTIME_DIR} - COMPONENT "grc" ) add_subdirectory(freedesktop) diff --git a/grc/scripts/freedesktop/CMakeLists.txt b/grc/scripts/freedesktop/CMakeLists.txt index 47e836f697..f936b366fc 100644 --- a/grc/scripts/freedesktop/CMakeLists.txt +++ b/grc/scripts/freedesktop/CMakeLists.txt @@ -31,7 +31,6 @@ install(FILES gnuradio-grc.xml gnuradio-grc.desktop DESTINATION ${grc_freedesktop_path} - COMPONENT "grc" ) find_program(HAVE_XDG_UTILS xdg-desktop-menu) @@ -44,6 +43,6 @@ if(UNIX AND HAVE_XDG_UTILS) @ONLY) install( PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/grc_setup_freedesktop - DESTINATION ${GR_PKG_LIBEXEC_DIR} COMPONENT "grc" + DESTINATION ${GR_PKG_LIBEXEC_DIR} ) endif(UNIX AND HAVE_XDG_UTILS) diff --git a/grc/scripts/gnuradio-companion b/grc/scripts/gnuradio-companion index 6130582f35..8f267c8198 100755 --- a/grc/scripts/gnuradio-companion +++ b/grc/scripts/gnuradio-companion @@ -20,22 +20,82 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA import os import sys +import warnings -script_path = os.path.dirname(os.path.abspath(__file__)) -source_tree_subpath = "/grc/scripts" -if not script_path.endswith(source_tree_subpath): - # run the installed version - from gnuradio.grc import checks - checks.do_all() - from gnuradio.grc.main import main - exit(main()) +GR_IMPORT_ERROR_MESSAGE = """\ +Cannot import gnuradio. + +Is the model path environment variable set correctly? + All OS: PYTHONPATH + +Is the library path environment variable set correctly? + Linux: LD_LIBRARY_PATH + Windows: PATH + MacOSX: DYLD_LIBRARY_PATH +""" + + +def die(error, message): + msg = "{0}\n\n({1})".format(message, error) + try: + from gi.repository import Gtk + d = Gtk.MessageDialog( + message_type=Gtk.MessageType.ERROR, + buttons=Gtk.ButtonsType.CLOSE, + text=msg, + ) + d.set_title(type(error).__name__) + d.run() + exit(1) + except ImportError: + exit(type(error).__name__ + '\n\n' + msg) + + +def check_gtk(): + try: + warnings.filterwarnings("error") + import gi + gi.require_version('Gtk', '3.0') + gi.require_version('PangoCairo', '1.0') -else: - print("Running from source tree") - sys.path.insert(1, script_path[:-len(source_tree_subpath)]) - from grc import checks - checks.do_all() - from grc.main import main + from gi.repository import Gtk + Gtk.init_check() + warnings.filterwarnings("always") + except Exception as err: + die(err, "Failed to initialize GTK. If you are running over ssh, " + "did you enable X forwarding and start ssh with -X?") + + +def check_gnuradio_import(): + try: + from gnuradio import gr + except ImportError as err: + die(err, GR_IMPORT_ERROR_MESSAGE) + + +def check_blocks_path(): + if 'GR_DONT_LOAD_PREFS' in os.environ and not os.environ.get('GRC_BLOCKS_PATH', ''): + die(EnvironmentError("No block definitions available"), + "Can't find block definitions. Use config.conf or GRC_BLOCKS_PATH.") + + +def run_main(): + script_path = os.path.dirname(os.path.abspath(__file__)) + source_tree_subpath = "/grc/scripts" + + if not script_path.endswith(source_tree_subpath): + # run the installed version + from gnuradio.grc.main import main + else: + print("Running from source tree") + sys.path.insert(1, script_path[:-len(source_tree_subpath)]) + from grc.main import main exit(main()) + +if __name__ == '__main__': + check_gnuradio_import() + check_gtk() + check_blocks_path() + run_main() |