Ejemplo n.º 1
0
    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)))
Ejemplo n.º 2
0
 def setNodeState(self, running_nodes, stopped_nodes, error_nodes):
   '''
   Sets the state of this capability.
   @param running_nodes: a list with running nodes.
   @type running_nodes: C{[str]}
   @param stopped_nodes: a list with not running nodes.
   @type stopped_nodes: C{[str]}
   @param error_nodes: a list with nodes having a problem.
   @type error_nodes: C{[str]}
   '''
   self.setAutoFillBackground(True)
   self.setBackgroundRole(QtGui.QPalette.Base)
   palette = QtGui.QPalette()
   if error_nodes:
     brush = QtGui.QBrush(QtGui.QColor(255, 100, 0))
   elif running_nodes and stopped_nodes:
     brush = QtGui.QBrush(QtGui.QColor(140, 185, 255)) #30, 50, 255
   elif running_nodes:
     self.on_button.setFlat(True)
     self.off_button.setFlat(False)
     brush = QtGui.QBrush(QtGui.QColor(59, 223, 18)) # 59, 223, 18
   else:
     brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
     self.on_button.setFlat(False)
     self.off_button.setFlat(True)
   palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
   brush.setStyle(QtCore.Qt.SolidPattern)
   palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
   self.setPalette(palette)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 def __init__(self, color=None, parent=None):
     super(ColorButton, self).__init__(parent)
     self.setMinimumWidth(50)
     if color is None:
         color = QtGui.QColor('gray')
     self.color = color
     self.clicked.connect(self.choose_color)
Ejemplo n.º 5
0
    def paintEvent(self, event):
        super(ColorButton, self).paintEvent(event)
        padding = 5

        rect = event.rect()
        painter = QtGui.QPainter(self)
        painter.setBrush(QtGui.QBrush(self.color))
        painter.setPen(QtGui.QColor("#CECECE"))
        rect.adjust(
            padding, padding,
            -1-padding, -1-padding)
        painter.drawRect(rect)
Ejemplo n.º 6
0
  def __init__(self, params=dict(), buttons=QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok, sidebar_var='', parent=None):
    '''
    Creates an input dialog.
    @param params: a dictionary with parameter names and (type, values). 
    The C{value}, can be a primitive value, a list with values or parameter 
    dictionary to create groups. In this case the type is the name of the group.
    @type params: C{dict(str:(str, {value, [..], dict()}))}
    '''
    QtGui.QDialog.__init__(self, parent=parent)
    self.setObjectName('ParameterDialog - %s'%str(params))

    self.__current_path = nm.settings().current_dialog_path
    self.horizontalLayout = QtGui.QHBoxLayout(self)
    self.horizontalLayout.setObjectName("horizontalLayout")
    self.horizontalLayout.setContentsMargins(1, 1, 1, 1)
    self.verticalLayout = QtGui.QVBoxLayout()
    self.verticalLayout.setObjectName("verticalLayout")
    self.verticalLayout.setContentsMargins(1, 1, 1, 1)
    # add filter row
    self.filter_frame = QtGui.QFrame(self)
    filterLayout = QtGui.QHBoxLayout(self.filter_frame)
    filterLayout.setContentsMargins(1, 1, 1, 1)
    label = QtGui.QLabel("Filter:", self.filter_frame)
    self.filter_field = QtGui.QLineEdit(self.filter_frame)
    filterLayout.addWidget(label)
    filterLayout.addWidget(self.filter_field)
    self.filter_field.textChanged.connect(self._on_filter_changed)
    self.filter_visible = True

    self.verticalLayout.addWidget(self.filter_frame)

    # create area for the parameter
    self.scrollArea = scrollArea = ScrollArea(self);
    scrollArea.setObjectName("scrollArea")
    scrollArea.setWidgetResizable(True)
    self.content = MainBox('/', 'str', False, self)
    scrollArea.setWidget(self.content)
    self.verticalLayout.addWidget(scrollArea)

    # add info text field
    self.info_field = QtGui.QTextEdit(self)
    self.info_field.setVisible(False)
    palette = QtGui.QPalette()
    brush = QtGui.QBrush(QtGui.QColor(255, 254, 242))
    brush.setStyle(QtCore.Qt.SolidPattern)
    palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
    brush = QtGui.QBrush(QtGui.QColor(255, 254, 242))
    brush.setStyle(QtCore.Qt.SolidPattern)
    palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
    brush = QtGui.QBrush(QtGui.QColor(244, 244, 244))
    brush.setStyle(QtCore.Qt.SolidPattern)
    palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
    self.info_field.setPalette(palette)
    self.info_field.setFrameShadow(QtGui.QFrame.Plain)
    self.info_field.setReadOnly(True)
    self.info_field.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
    self.info_field.setObjectName("dialog_info_field")
    self.verticalLayout.addWidget(self.info_field)

    # create buttons
    self.buttonBox = QtGui.QDialogButtonBox(self)
    self.buttonBox.setObjectName("buttonBox")
    self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
    self.buttonBox.setStandardButtons(buttons)
    self.buttonBox.accepted.connect(self.accept)
    self.buttonBox.rejected.connect(self.reject)
    self.verticalLayout.addWidget(self.buttonBox)
    self.horizontalLayout.addLayout(self.verticalLayout)

    # add side bar for checklist
    values = nm.history().cachedParamValues('/%s'%sidebar_var)
    self.sidebar_frame = QtGui.QFrame()
    self.sidebar_frame.setObjectName(sidebar_var)
    sidebarframe_verticalLayout = QtGui.QVBoxLayout(self.sidebar_frame)
    sidebarframe_verticalLayout.setObjectName("sidebarframe_verticalLayout")
    sidebarframe_verticalLayout.setContentsMargins(1, 1, 1, 1)
    self._sidebar_selected = 0
    if len(values) > 1 and sidebar_var in params:
      self.horizontalLayout.addWidget(self.sidebar_frame)
      try:
        self.sidebar_default_val = params[sidebar_var][1]
      except:
        self.sidebar_default_val = ''
      values.sort()
      for v in values:
        checkbox = QtGui.QCheckBox(v)
        checkbox.stateChanged.connect(self._on_sidebar_stateChanged)
        self.sidebar_frame.layout().addWidget(checkbox)
      self.sidebar_frame.layout().addItem(QtGui.QSpacerItem(100, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
    # set the input fields
    if params:
      self.content.createFieldFromValue(params)
      self.setInfoActive(False)

    if self.filter_frame.isVisible():
      self.filter_field.setFocus()
    self.setMinimumSize(350,200)
import logging

from qt_gui.plugin import Plugin
from python_qt_binding import loadUi
import python_qt_binding.QtGui as QtGui
import python_qt_binding.QtCore as QtCore

import check_resource_usage

import rqt_grounding_and_analysis_logging
analysis_multirobot_logger = logging.getLogger("analysis_multirobot_logger")

HIGHLIGHT_COLOR = QtGui.QColor(255, 204, 204)  #QtCore.Qt.red


class ExtensionAnalysisMultiRobot(Plugin):
    def __init__(self, context):
        super(ExtensionAnalysisMultiRobot, self).__init__(context)

    def setup_extension(self):
        # enable switch tab
        self._stackedWidget_analysis = self._widget.findChild(
            QtGui.QStackedWidget, name="stackedWidget_analysis")
        self._stackedWidget_analysis.setCurrentIndex(0)

        # connect callback for pushButton switch to multiple
        self._pushButton_switch_to_multiple = self._widget.findChild(
            QtGui.QPushButton, name="pushButton_switch_to_multiple")
        self._pushButton_switch_to_multiple.clicked.connect(
            self.on_pushButton_switch_to_multiple_clicked)
Ejemplo n.º 8
0
class AlarmPlugin(Plugin):

    _severity_mapping = {
        0: qtg.QColor(255, 0, 0),
        1: qtg.QColor(240, 100, 0),
        2: qtg.QColor(220, 200, 0),
        3: qtg.QColor(30, 255, 30),
    }
    _column_headers = ["Name", "Status", "Description", "Time Recieved"]

    def __init__(self, context):
        super(AlarmPlugin, self).__init__(context)

        self.setObjectName('AlarmPlugin')

        # Things seem to misbehave when this is missing
        # Process standalone plugin command-line arguments
        from argparse import ArgumentParser
        parser = ArgumentParser()
        # Add argument(s) to the parser.
        parser.add_argument("-q",
                            "--quiet",
                            action="store_true",
                            dest="quiet",
                            help="Put plugin in silent mode")
        args, unknowns = parser.parse_known_args(context.argv())

        self._widget = QWidget()

        # Get path to UI file which should be in the "resource" folder of this package
        ui_file = os.path.join(rospkg.RosPack().get_path('sub8_rqt'),
                               'resource', 'sub8_rqt_alarms.ui')

        # Extend the widget with all attributes and children from UI file
        self.ui = loadUi(ui_file, self._widget)

        self._widget.setObjectName('AlarmPlugin')
        self.alarm_tree = self._widget.findChild(qtg.QTreeWidget, 'alarm_tree')

        self.alarm_table = self._widget.findChild(qtg.QTableWidget,
                                                  'alarm_table')

        # Alarm parameter cache stores some additional information about the alarm
        # (for use when an alarm is clicked)
        self.alarm_parameter_cache = {}

        # Default row-count to 0
        self.alarm_table.setRowCount(0)
        self.alarm_table.setColumnCount(len(self._column_headers))
        self.alarm_table.setHorizontalHeaderLabels(self._column_headers)
        self.alarm_table.clicked.connect(self.open_alarm)

        # ---- ROS ----
        self.alarm_sub = rospy.Subscriber('alarm', Alarm,
                                          self.new_alarm_callback)

        if context.serial_number() > 1:
            self._widget.setWindowTitle(self._widget.windowTitle() +
                                        (' (%d)' % context.serial_number()))

        # Add widget to the user interface
        context.add_widget(self._widget)

    def new_alarm_callback(self, msg):
        '''React to a new alarm'''
        columns = ['alarm_name', 'severity', 'problem_description']
        row_elements = map(functools.partial(getattr, msg), columns)

        # Get pub time
        alarm_epoch = msg.header.stamp.to_time()
        formatted_time = datetime.datetime.fromtimestamp(alarm_epoch).strftime(
            '%I:%M:%S.%f')
        row_elements.append(formatted_time)
        color = self._severity_mapping[msg.severity]
        self.alarm_table.insertRow(0)
        first_col = self.set_row(0, row_elements, color)
        self.alarm_parameter_cache[first_col] = msg.parameters

    def set_row(self, row, data, color):
        '''Set a whole row in the alarm table'''
        assert isinstance(data, list), "data must be a list"
        to_return = None
        for col, element in enumerate(data):
            table_item = newTableWidgetItem(element)
            table_item.setBackground(color)
            self.alarm_table.setItem(row, col, table_item)
            if col == 0:
                to_return = table_item
        return to_return

    def open_alarm(self, event):
        '''React when an alarm has been clicked
            1. Use event to determine which cell has been clicked
            2. Select that cell's whole row
            3. Use the cached json_descriptions of each alarm to get that row's json data

        When an alarm has been clicked, we'll display its json parameters in the box on the right
        '''
        items_selected = self.alarm_table.selectedItems()
        if len(items_selected) == 0:
            return

        row_selected = items_selected[0].row()
        self.alarm_table.selectRow(row_selected)
        key_item = self.alarm_table.itemAt(row_selected, 0)

        try:
            json_parameters = json.loads(self.alarm_parameter_cache[key_item])
        except ValueError:
            rospy.logwarn("Could not decode alarm message")
            return

        self.alarm_tree.clear()

        try:
            build_tree_from_json(self.alarm_tree, json_parameters)
        except AssertionError:
            rospy.logwarn(
                "Could not draw json tree for alarm (Is it a dictionary?)")

    def shutdown_plugin(self):
        '''Unregister our subsribers'''
        self.alarm_sub.unregister()

    def save_settings(self, plugin_settings, instance_settings):
        rospy.logwarn('Saving does not currently do anything')
        pass

    def restore_settings(self, plugin_settings, instance_settings):
        rospy.logwarn('Restoring does not currently do anything')
        pass