summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2016-08-09 21:15:56 +0200
committerSebastian Koslowski <koslowski@kit.edu>2016-08-09 21:18:29 +0200
commit8e2886dc6b45b4e3f68d84887f728483fd2d1538 (patch)
treee682bbea9e329c80ebc66233d58a01a1306bddbd /grc
parentcbe1e43b0f0d1ee0d356b7110700400578855ac6 (diff)
parentfc1a6a88483120921936e415aba4d5d1a9b42d96 (diff)
Merge remote-tracking branch 'upstream/next' into gtk3
Diffstat (limited to 'grc')
-rw-r--r--grc/CMakeLists.txt24
-rw-r--r--grc/blocks/CMakeLists.txt1
-rwxr-xr-xgrc/checks.py83
-rw-r--r--grc/core/CMakeLists.txt2
-rw-r--r--grc/core/Config.py13
-rw-r--r--grc/core/Constants.py1
-rw-r--r--grc/core/Param.py6
-rw-r--r--grc/core/Platform.py9
-rw-r--r--grc/core/generator/CMakeLists.txt2
-rw-r--r--grc/core/generator/Generator.py3
-rw-r--r--grc/core/utils/CMakeLists.txt1
-rw-r--r--grc/grc.conf.in1
-rw-r--r--grc/gui/ActionHandler.py15
-rw-r--r--grc/gui/BlockTreeWindow.py4
-rw-r--r--grc/gui/CMakeLists.txt1
-rw-r--r--grc/gui/Preferences.py4
-rw-r--r--grc/scripts/CMakeLists.txt1
-rw-r--r--grc/scripts/freedesktop/CMakeLists.txt3
-rwxr-xr-xgrc/scripts/gnuradio-companion88
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()