def __init__(self, parent=None): QtGui.QSyntaxHighlighter.__init__(self, parent) self.rules = [] self.commentStart = QtCore.QRegExp("#") self.commentEnd = QtCore.QRegExp("\n") self.commentFormat = QtGui.QTextCharFormat() self.commentFormat.setFontItalic(True) self.commentFormat.setForeground(QtCore.Qt.darkGray) f = QtGui.QTextCharFormat() r = QtCore.QRegExp() r.setMinimal(True) f.setFontWeight(QtGui.QFont.Normal) f.setForeground(QtCore.Qt.darkBlue) tagList = [ "\\bignore_hosts\\b", "\\bsync_hosts\\b", "\\bignore_nodes\\b", "\\bsync_nodes\\b", "\\bignore_topics\\b", "\\bsync_topics\\b", "\\bignore_services\\b", "\\bsync_services\\b", "\\bsync_topics_on_demand\\b", "\\bsync_remote_nodes\\b" ] for tag in tagList: r.setPattern(tag) self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.darkGreen) f.setFontWeight(QtGui.QFont.Bold) attrList = ["\\b\\*|\\*\\B|\\/\\*"] for attr in attrList: r.setPattern(attr) self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
def getIncludedFiles(cls, inc_file, regexp_list=[ QtCore.QRegExp("\\binclude\\b"), QtCore.QRegExp("\\btextfile\\b"), QtCore.QRegExp("\\bfile\\b") ]): ''' Reads the configuration file and searches for included files. This files will be returned in a list. @param inc_file: path of the ROS launch file @param regexp_list: pattern of @return: the list with all files needed for the configuration @rtype: C{[str,...]} ''' result = set() with open(inc_file, 'r') as f: content = f.read() # remove the comments comment_pattern = QtCore.QRegExp("<!--.*?-->") pos = comment_pattern.indexIn(content) while pos != -1: content = content[:pos] + content[pos + comment_pattern. matchedLength():] pos = comment_pattern.indexIn(content) lines = content.splitlines() for line in lines: index = cls._index(line, regexp_list) if index > -1: startIndex = line.find('"', index) if startIndex > -1: endIndex = line.find('"', startIndex + 1) fileName = line[startIndex + 1:endIndex] if len(fileName) > 0: try: path = cls.interpretPath(fileName, os.path.dirname(inc_file)) if os.path.isfile(path): result.add(path) if path.endswith('.launch'): result.update( cls.getIncludedFiles( path, regexp_list)) except: pass return list(result)
def __init__(self, parent=None): QtGui.QSyntaxHighlighter.__init__(self, parent) self.rules = [] self.commentStart = QtCore.QRegExp("<!--") self.commentEnd = QtCore.QRegExp("-->") self.default_format = QtGui.QTextCharFormat() self.default_format.setForeground(QtGui.QColor(24, 24, 24)) self.mark_background = QtGui.QBrush(QtGui.QColor(251, 247, 222)) self.commentFormat = QtGui.QTextCharFormat() f = QtGui.QTextCharFormat() r = QtCore.QRegExp() r.setMinimal(True) f.setFontWeight(QtGui.QFont.Normal) f.setForeground(QtCore.Qt.darkBlue) # create patterns for TAG tagList = ["\\b%s\\b" % t for t in self.LAUNCH_CHILDS.keys()] for tag in tagList: r.setPattern(tag) self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) # create patterns for ATTRIBUTES f.setForeground(QtCore.Qt.darkGreen) attrList = set([ "\\b%s" % attr for v in self.LAUNCH_ATTR.values() for attr in v.keys() ]) for attr in attrList: r.setPattern(attr) self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) # create patterns for strings f.setForeground(QtCore.Qt.magenta) r.setPattern("\".*\"") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) # create patterns for substitutions f.setForeground(QtGui.QColor(127, 64, 127)) r.setPattern("\\$\\(.*\\)") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) # create patterns for DOCTYPE f.setForeground(QtCore.Qt.lightGray) r.setPattern("<!DOCTYPE.*>") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) r.setPattern("<\\?xml.*\\?>") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) self.commentFormat.setFontItalic(True) self.commentFormat.setForeground(QtCore.Qt.darkGray) # part to select an XML block self._current_mark_range = (-1, -1) # absolute (start, end) positions
def __init__(self, filename, parent=None): self.parent = parent QtGui.QTextEdit.__init__(self, parent) self.setObjectName(' - '.join(['Editor', filename])) font = QtGui.QFont() font.setFamily("Fixed".decode("utf-8")) font.setPointSize(12) self.setFont(font) self.setLineWrapMode(QtGui.QTextEdit.NoWrap) self.setTabStopWidth(25) self.setAcceptRichText(False) self.setCursorWidth(2) self.setFontFamily("courier new") self.setProperty("backgroundVisible", True) self.regexp_list = [QtCore.QRegExp("\\binclude\\b"), QtCore.QRegExp("\\btextfile\\b"), QtCore.QRegExp("\\bfile\\b"), QtCore.QRegExp("\\bvalue=.*pkg:\/\/\\b"), QtCore.QRegExp("\\bvalue=.*package:\/\/\\b"), QtCore.QRegExp("\\bvalue=.*\$\(find\\b")] self.filename = filename self.file_info = None if self.filename: f = QtCore.QFile(filename); if f.open(QtCore.QIODevice.ReadOnly | QtCore.QIODevice.Text): self.file_info = QtCore.QFileInfo(filename) self.setText(unicode(f.readAll(), "utf-8")) self.path = '.' # enables drop events self.setAcceptDrops(True)
def load(self, argv): ''' @param argv: the list with argv parameter needed to load the launch file. The name and value are separated by C{:=} @type argv: C{[str]} @return True, if the launch file was loaded @rtype boolean @raise LaunchConfigException: on load errors ''' try: roscfg = roslaunch.ROSLaunchConfig() loader = roslaunch.XmlLoader() self.argv = self.resolveArgs(argv) loader.load(self.Filename, roscfg, verbose=False, argv=self.argv) self.__roscfg = roscfg nm.file_watcher().add_launch(self.__masteruri, self.__launchFile, self.__launch_id, self.getIncludedFiles(self.Filename)) if not nm.is_local(nm.nameres().getHostname(self.__masteruri)): files = self.getIncludedFiles( self.Filename, regexp_list=[ QtCore.QRegExp("\\bdefault\\b"), QtCore.QRegExp("\\bvalue=.*pkg:\/\/\\b"), QtCore.QRegExp("\\bvalue=.*package:\/\/\\b"), QtCore.QRegExp("\\bvalue=.*\$\(find\\b") ]) nm.file_watcher_param().add_launch(self.__masteruri, self.__launchFile, self.__launch_id, files) except roslaunch.XmlParseException, e: test = list( re.finditer(r"environment variable '\w+' is not set", str(e))) message = str(e) if test: message = ''.join([ message, '\n', 'environment substitution is not supported, use "arg" instead!' ]) raise LaunchConfigException(message)
def __init__(self, parent=None): QtGui.QSyntaxHighlighter.__init__(self, parent) self.rules = [] self.commentStart = QtCore.QRegExp("#") self.commentEnd = QtCore.QRegExp("\n|\r") self.default_format = QtGui.QTextCharFormat() self.default_format.setForeground(QtGui.QColor(24, 24, 24)) self.commentFormat = QtGui.QTextCharFormat() self.commentFormat.setFontItalic(True) self.commentFormat.setForeground(QtCore.Qt.darkGray) f = QtGui.QTextCharFormat() r = QtCore.QRegExp() r.setMinimal(True) f.setFontWeight(QtGui.QFont.Normal) f.setForeground(QtCore.Qt.blue) tagList = ["\\btrue\\b", "\\bfalse\\b"] for tag in tagList: r.setPattern(tag) self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtGui.QColor(127, 64, 127)) r.setPattern("\\d+") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.darkBlue) r.setPattern("^\s*[_.\w]*\s*:") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.darkBlue) r.setPattern(":\s*:[_\.\w]*$|:\s*\@[_\.\w]*$") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setFontWeight(QtGui.QFont.Bold) f.setForeground(QtCore.Qt.darkRed) r.setPattern("^\s*-") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.darkRed) r.setPattern("^---$") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.darkGreen) r.setPattern("[\[\]\{\}\,]") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setFontWeight(QtGui.QFont.Normal) f.setForeground(QtCore.Qt.magenta) r.setPattern("\".*\"|\'.*\'") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtGui.QColor(127, 64, 127)) r.setPattern("\\$\\(.*\\)") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) f.setForeground(QtCore.Qt.lightGray) r.setPattern("<!DOCTYPE.*>") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f))) r.setPattern("<\\?xml.*\\?>") self.rules.append((QtCore.QRegExp(r), QtGui.QTextCharFormat(f)))
def __init__(self, input_id): super(InputWidget, self).__init__() self._id = input_id self.setLayout(QtWidgets.QHBoxLayout()) self._id_label = QtWidgets.QLabel("Input " + str(self._id)) self.layout().addWidget(self._id_label) # ---- Input port input ---- self._input_port_input = QtWidgets.QLineEdit() self.port_validator = QtGui.QRegExpValidator(QtCore.QRegExp("[a-z]+[0-9]+")) self._input_port_input.setValidator(self.port_validator) self.layout().addWidget(self._input_port_input) self._input_port_input.setText(str(rospy.get_param(self.get_param_base() + "input", "js" + str(self._id)))) self._input_port_input.textChanged.connect(self.change_input_port) # ---- /Input selector ---- # ---- Type selector ---- self._type_selector = QtWidgets.QComboBox() self.layout().addWidget(self._type_selector) self._type_selector.insertItem(0, "xbox ewoud") self._type_selector.insertItem(0, "xbox vision") self._type_selector.insertItem(0, "playstation") self._type_selector.insertItem(0, "gioteck") currentJoyType = rospy.get_param(self.get_param_base() + "joyType", "gioteck"); self._type_selector.setCurrentIndex(self._type_selector.findText(currentJoyType)) self._type_selector.currentIndexChanged.connect(self.change_input_type) # ---- /Type selector ---- self._robot_id_label = QtWidgets.QLabel("Robot id") self.layout().addWidget(self._robot_id_label) # --- Robot id input ---- self._robot_id_input = QtWidgets.QLineEdit() self.int_validator = QtGui.QRegExpValidator(QtCore.QRegExp("[0-9]+")) self._robot_id_input.setValidator(self.int_validator) self.layout().addWidget(self._robot_id_input) self._robot_id_input.setText(str(rospy.get_param(self.get_param_base() + "robot", int(self._id)))) self._robot_id_input.textChanged.connect(self.change_bot_id) # --- /Robot id input ---- # --- Mode selector ---- self._mode_selector = QtWidgets.QComboBox() self.layout().addWidget(self._mode_selector) self._mode_selector.insertItem(0, "our keeper") self._mode_selector.insertItem(0, "normal") currentMode = rospy.get_param(self.get_param_base() + "mode", "normal"); self._mode_selector.setCurrentIndex(self._mode_selector.findText(currentMode)) self._mode_selector.currentIndexChanged.connect(self.change_input_mode)
def set_package_filter(self, text): self.launchlist_proxyModel.setFilterRegExp( QtCore.QRegExp(text, QtCore.Qt.CaseInsensitive, QtCore.QRegExp.Wildcard))