Esempio n. 1
0
class ModelLogger:
    """
    Convenience class for logging data.
    """
    def __init__(self):
        """
        Initializes the ModelLogger.
        """
        self.__log_model = QStandardItemModel(0, 4, None)
        self.__log_model.setHorizontalHeaderLabels(
            ["type", "date", "location", "message"])

    def log(self, type, date, location, message):
        """
        Adds a log entry to the log_model.

        :param type: the type of the log_entry
        :type type: str
        :param date: the time of the log_entry
        :type date: Time
        :param location: the location, were the fault/info/... occured
        :type location: str
        :param message: the message of the log_entry
        :type message: str
        """
        self.__log_model.insertRow(0)
        self.__log_model.setData(self.__log_model.index(0, 0), str(type))
        self.__log_model.setData(
            self.__log_model.index(0, 1),
            time.strftime("%d.%m-%H:%M:%S",
                          time.localtime(int(str(date)) / 1000000000)))
        self.__log_model.setData(self.__log_model.index(0, 2), str(location))
        self.__log_model.setData(self.__log_model.index(0, 3), str(message))

    def get_representation(self):
        """
        Returns the log as a QStandartItemModel

        :returns: the log-model
        :rtype: QStandartItemModel
        """
        return self.__log_model
Esempio n. 2
0
class ModelLogger:
    """
    Convenience class for logging data.
    """
    
    def __init__(self):
        """
        Initializes the ModelLogger.
        """
        self.__log_model = QStandardItemModel(0, 4, None)
        self.__log_model.setHorizontalHeaderLabels(["type", "date", "location", "message"])


    def log(self, type, date, location, message):
        """
        Adds a log entry to the log_model.

        :param type: the type of the log_entry
        :type type: str
        :param date: the time of the log_entry
        :type date: Time
        :param location: the location, were the fault/info/... occured
        :type location: str
        :param message: the message of the log_entry
        :type message: str
        """
        self.__log_model.insertRow(0)
        self.__log_model.setData(self.__log_model.index(0, 0), str(type))
        self.__log_model.setData(self.__log_model.index(0, 1), time.strftime("%d.%m-%H:%M:%S", time.localtime(int(str(date)) / 1000000000)))
        self.__log_model.setData(self.__log_model.index(0, 2), str(location))
        self.__log_model.setData(self.__log_model.index(0, 3), str(message))


    def get_representation(self):
        """
        Returns the log as a QStandartItemModel

        :returns: the log-model
        :rtype: QStandartItemModel
        """
        return self.__log_model
Esempio n. 3
0
class ChatbotGUI(Plugin):
    def __init__(self, context):
        super(ChatbotGUI, self).__init__(context)
        self.setObjectName('ChatbotGUI')
        from argparse import ArgumentParser
        parser = ArgumentParser()
        parser.add_argument("-q",
                            "--quiet",
                            action="store_true",
                            dest="quiet",
                            help="Put plugin in silent mode")
        args, unknowns = parser.parse_known_args(context.argv())
        if not args.quiet:
            print 'arguments: ', args
            print 'unknowns: ', unknowns

        self._widget = QWidget()
        ui_file = os.path.join(rospkg.RosPack().get_path('chatbot_gui'),
                               'resource', 'ChatbotGUI.ui')
        loadUi(ui_file, self._widget, {'NavViewWidget': NavViewWidget})
        self._widget.setObjectName('ChatbotGUIUi')
        if context.serial_number() > 1:
            self._widget.setWindowTitle(self._widget.windowTitle() +
                                        (' (%d)' % context.serial_number()))
        context.add_widget(self._widget)

        self._widget.pickDone.clicked[bool].connect(self._handle_pick_clicked)
        self._widget.placeDone.clicked[bool].connect(
            self._handle_place_clicked)
        self._widget.textSay.keyPressEvent = self._handle_custom_keypress
        #ros stuff
        self.pubPick = rospy.Publisher('picker', String, queue_size=10)
        self.pubPlace = rospy.Publisher('placer', String, queue_size=10)
        self.pubRecog = rospy.Publisher('recognition/raw_result',
                                        String,
                                        queue_size=10)
        self.subRecog = rospy.Subscriber("recognition/raw_result", String,
                                         self._recog_callback)
        self.subLog = rospy.Subscriber("chatbot_gui/log", String,
                                       self._log_callback)
        self.subStatus = rospy.Subscriber("chatbot_gui/status", String,
                                          self._status_callback)

        self.model = QStandardItemModel()
        self.model.setColumnCount(2)
        headerNames = []
        headerNames.append("Timestamp")
        headerNames.append("Message")
        self.model.setHorizontalHeaderLabels(headerNames)
        self._widget.tableLog.setModel(self.model)
        self._widget.tableLog.horizontalHeader().setStretchLastSection(True)
        self._widget.tableLog.setColumnWidth(0, 170)
        self._message_limit = 20000
        self._message_count = 0

    def _add_log(self, data):
        timestamp = QStandardItem(
            QDateTime.currentDateTime().toString('d.M.yyyy hh:mm:ss.zzz'))
        timestamp.setTextAlignment(Qt.AlignRight)
        timestamp.setEditable(False)

        message = QStandardItem(data)
        message.setEditable(False)

        row = []
        row.append(timestamp)

        row.append(message)

        self._message_count = self._message_count + 1
        self.model.insertRow(0, row)

        if self._message_count > self._message_limit:
            self.model.removeRow(self.model.rowCount() - 1)
            self._message_count = self._message_count - 1

    def _handle_pick_clicked(self):
        self.pubPick.publish("[pick done]")

    def _handle_place_clicked(self):
        self.pubPlace.publish("[place done]")

    def _handle_custom_keypress(self, event):
        if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:

            self.pubRecog.publish(self._widget.textSay.toPlainText())
            self._widget.textSay.setPlainText("")
        else:
            QPlainTextEdit.keyPressEvent(self._widget.textSay, event)

    def _recog_callback(self, data):
        self._add_log("heard: '" + data.data + "'")

    def _log_callback(self, data):
        self._add_log(data.data)

    def _status_callback(self, data):
        self._widget.labelStatus.setText(data.data)

    def shutdown_plugin(self):
        print("shutdown_plugin: clearing ros publishers.")
        self.subRecog.unregister()
        self.subStatus.unregister()
        self.subLog.unregister()
        self.pubPick.unregister()
        self.pubPlace.unregister()
        self.pubRecog.unregister()
        pass

    def save_settings(self, plugin_settings, instance_settings):
        # TODO save intrinsic configuration, usually using:
        # instance_settings.set_value(k, v)
        pass

    def restore_settings(self, plugin_settings, instance_settings):
        # TODO restore intrinsic configuration, usually using:
        # v = instance_settings.value(k)
        pass