Example #1
0
 def _check_node_conditions(self, launch_node, node_name, node_idx, resolve_args, path):
     try:
         idx = 0
         nodes = launch_node.getElementsByTagName('node')
         for node in nodes:
             if node.getAttribute('name') == node_name:
                 if idx == node_idx:
                     for attridx in range(node.attributes.length):
                         attr = node.attributes.item(attridx)
                         if attr.localName == 'if':
                             val = replace_arg(attr.value, resolve_args)
                             return val in ['true', '1']
                         elif attr.localName == 'unless':
                             val = replace_arg(attr.value, resolve_args)
                             return val in ['false', '0']
                 idx += 1
     except Exception as err:
         rospy.logwarn("%s in %s" % (utf8(err), path))
     return True
Example #2
0
 def mouseReleaseEvent(self, event):
     '''
     Opens the new editor, if the user clicked on the included file and sets the
     default cursor.
     '''
     if self.isReadOnly():
         event.accept()
         return
     if event.modifiers() == Qt.ControlModifier or event.modifiers(
     ) == Qt.ShiftModifier:
         cursor = self.cursorForPosition(event.pos())
         try:
             textblock = self._strip_bad_parts(cursor.block().text(),
                                               cursor.positionInBlock())
             for inc_file in find_included_files(textblock,
                                                 False,
                                                 False,
                                                 search_in_ext=[]):
                 aval = inc_file.raw_inc_path
                 aitems = aval.split("'")
                 for search_for in aitems:
                     if not search_for:
                         continue
                     try:
                         rospy.logdebug("try to interpret: %s" % search_for)
                         args_in_name = get_arg_names(search_for)
                         resolved_args = {}
                         # if found arg in the name, try to detect values
                         if args_in_name:
                             rospy.logdebug(
                                 "  args %s in filename found, try to resolve..."
                                 % args_in_name)
                             resolved_args = self.parent.graph_view.get_include_args(
                                 args_in_name, search_for, self.filename)
                         if resolved_args:
                             params = {}
                             self._internal_args
                             # create parameter dialog
                             for key, val in resolved_args.items():
                                 values = list(val)
                                 # add args defined in current file
                                 if key in self._internal_args and self._internal_args[
                                         key] not in values:
                                     values.append(self._internal_args[key])
                                 params[key] = {
                                     ':type': 'string',
                                     ':value': values
                                 }
                             dia = ParameterDialog(
                                 params,
                                 store_geometry="open_launch_on_click")
                             dia.setFilterVisible(False)
                             dia.setWindowTitle('Select Parameter')
                             if dia.exec_():
                                 params = dia.getKeywords()
                                 search_for = replace_arg(
                                     search_for, params)
                             else:
                                 # canceled -> cancel interpretation
                                 QTextEdit.mouseReleaseEvent(self, event)
                                 return
                         # now resolve find-statements
                         rospy.logdebug(
                             "  send interpret request to daemon: %s" %
                             search_for)
                         inc_files = nm.nmd().launch.get_interpreted_path(
                             self.filename, text=[search_for])
                         for path, exists in inc_files:
                             try:
                                 rospy.logdebug(
                                     "  received interpret request from daemon: %s, exists: %d"
                                     % (path, exists))
                                 if exists:
                                     event.setAccepted(True)
                                     self.load_request_signal.emit(path)
                                 else:
                                     _filename, file_extension = os.path.splitext(
                                         path)
                                     if file_extension in nm.settings(
                                     ).launch_view_file_ext:
                                         # create a new file, if it does not exists
                                         result = MessageBox.question(
                                             self,
                                             "File not exists",
                                             '\n\n'.join([
                                                 "Create a new file?", path
                                             ]),
                                             buttons=MessageBox.Yes
                                             | MessageBox.No)
                                         if result == MessageBox.Yes:
                                             content = '<launch>\n\n</launch>' if path.endswith(
                                                 '.launch') else ''
                                             nm.nmd().file.save_file(
                                                 path, content.encode(), 0)
                                             event.setAccepted(True)
                                             self.load_request_signal.emit(
                                                 path)
                             except Exception as e:
                                 MessageBox.critical(self,
                                                     "Error",
                                                     "File not found %s" %
                                                     path,
                                                     detailed_text=utf8(e))
                     except exceptions.ResourceNotFound as not_found:
                         MessageBox.critical(
                             self,
                             "Error",
                             "Resource not found %s" % search_for,
                             detailed_text=utf8(not_found.error))
         except Exception as err:
             print(traceback.format_exc())
             MessageBox.critical(self,
                                 "Error",
                                 "Error while request included file %s" %
                                 self.filename,
                                 detailed_text=utf8(err))
     QTextEdit.mouseReleaseEvent(self, event)