def get_field_type_capable_with_index(field_string): '''get type even if it contains [] for array''' m = re.search('(.+)(\[[0-9]+\])$', field_string) if m: return helpers.get_field_type(m.group(1)) else: return helpers.get_field_type(field_string)
def _change_publisher_expression(self, publisher_info, topic_name, new_value): expression = str(new_value) if len(expression) == 0: if topic_name in publisher_info['expressions']: del publisher_info['expressions'][topic_name] #qDebug('Publisher._change_publisher_expression(): removed expression for: %s' % (topic_name)) else: slot_type, is_array = get_field_type(topic_name) if is_array: slot_type = list # strip possible trailing error message from expression error_prefix = '# error' error_prefix_pos = expression.find(error_prefix) if error_prefix_pos >= 0: expression = expression[:error_prefix_pos] success, _ = self._evaluate_expression(expression, slot_type) if success: old_expression = publisher_info['expressions'].get(topic_name, None) publisher_info['expressions'][topic_name] = expression #print 'Publisher._change_publisher_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value) self._fill_message_slots(publisher_info['message_instance'], publisher_info['topic_name'], publisher_info['expressions'], publisher_info['counter']) try: publisher_info['message_instance']._check_types() except Exception as e: print('serialization error: %s' % e) if old_expression is not None: publisher_info['expressions'][topic_name] = old_expression else: del publisher_info['expressions'][topic_name] return '%s %s: %s' % (expression, error_prefix, e) return expression else: return '%s %s evaluating as "%s"' % (expression, error_prefix, slot_type.__name__)
def _change_message_expression(self, message_info, topic_name, new_value): expression = str(new_value) if len(expression) == 0: if topic_name in message_info['expressions']: del message_info['expressions'][topic_name] #qDebug('MsgEditor._change_message_expression(): removed expression for: %s' % (topic_name)) else: slot_type, is_array = get_field_type(topic_name) if is_array: slot_type = list # strip possible trailing error message from expression error_prefix = '# error' error_prefix_pos = expression.find(error_prefix) if error_prefix_pos >= 0: expression = expression[:error_prefix_pos] success, _ = self._evaluate_expression(expression, slot_type) if success: old_expression = message_info['expressions'].get(topic_name, None) message_info['expressions'][topic_name] = expression #print 'MsgEditor._change_message_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value) self._fill_message_slots(message_info['instance'], message_info['topic_name'], message_info['expressions'], message_info['counter']) try: message_info['instance']._check_types() except Exception, e: error_str = str(e) print 'serialization error:', error_str if old_expression is not None: message_info['expressions'][topic_name] = old_expression else: del message_info['expressions'][topic_name] return '%s %s: %s' % (expression, error_prefix, error_str) return expression else:
def accepted_topic(topic): msg_types = [OccupancyGrid, Path, PolygonStamped, PointStamped] msg_type, array = get_field_type(topic) if not array and msg_type in msg_types: return True else: return False
def dropEvent(self, e): if e.mimeData().hasText(): topic_name = str(e.mimeData().text()) else: dropped_item = e.source().selectedItems()[0] topic_name = str(dropped_item.data(0, Qt.UserRole)) topic_type, array = get_field_type(topic_name) if not array: if topic_type is OccupancyGrid: self.map_topic = topic_name # Swap out the nav view for one with the new topics self.new_nav_view() elif topic_type is Path: self.paths.append(topic_name) self._nav_view.add_path(topic_name) elif topic_type is PolygonStamped: self.polygons.append(topic_name) self._nav_view.add_polygon(topic_name)
def dropEvent(self, e): if e.mimeData().hasText(): topic_name = str(e.mimeData().text()) else: droped_item = e.source().selectedItems()[0] topic_name = str(droped_item.data(0, Qt.UserRole)) topic_type, array = get_field_type(topic_name) if not array: if topic_type is OccupancyGrid: self.map = topic_name # Swap out the nav view for one with the new topics self._nav_view.close() self._nav_view = NavView(self.map, self.paths, self.polygons, self._tf, self) self._layout.addWidget(self._nav_view) elif topic_type is Path: self.paths.append(topic_name) self._nav_view.add_path(topic_name) elif topic_type is PolygonStamped: self.polygons.append(topic_name) self._nav_view.add_polygon(topic_name)
def _change_message_expression(self, message_info, topic_name, new_value): expression = str(new_value) if len(expression) == 0: if topic_name in message_info['expressions']: del message_info['expressions'][topic_name] #qDebug('MsgEditor._change_message_expression(): removed expression for: %s' % (topic_name)) else: slot_type, is_array = get_field_type(topic_name) if is_array: slot_type = list # strip possible trailing error message from expression error_prefix = '# error' error_prefix_pos = expression.find(error_prefix) if error_prefix_pos >= 0: expression = expression[:error_prefix_pos] success, _ = self._evaluate_expression(expression, slot_type) if success: old_expression = message_info['expressions'].get( topic_name, None) message_info['expressions'][topic_name] = expression #print 'MsgEditor._change_message_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value) self._fill_message_slots(message_info['instance'], message_info['topic_name'], message_info['expressions'], message_info['counter']) try: message_info['instance']._check_types() except Exception, e: error_str = str(e) print 'serialization error:', error_str if old_expression is not None: message_info['expressions'][ topic_name] = old_expression else: del message_info['expressions'][topic_name] return '%s %s: %s' % (expression, error_prefix, error_str) return expression else: