Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 from rosgraph_msgs.msg import Log
00034 import rospy
00035
00036 from python_qt_binding.QtCore import QObject
00037
00038 from .console_subscriber_dialog import ConsoleSubscriberDialog
00039
00040
00041 class ConsoleSubscriber(QObject):
00042 """
00043 Subscribes to the /rosout_agg topic if a callback is provided and allows
00044 the user to change the currently subscribed topic.
00045 Also holds the message limit from ConsolesubscriberDialog
00046 """
00047 def __init__(self, callback=None):
00048 """
00049 :param callback: callback function to invoke when receiving a message ''function''
00050 """
00051 super(ConsoleSubscriber, self).__init__()
00052 self._msgcallback = callback
00053 self._currenttopic = "/rosout_agg"
00054 self._messagelimit = 20000
00055 if callback is not None:
00056 self._sub = rospy.Subscriber(self._currenttopic, Log, self._msgcallback)
00057
00058 def show_dialog(self):
00059 dialog = ConsoleSubscriberDialog(rospy.get_published_topics(), self._messagelimit)
00060 for index in range(dialog.topic_combo.count()):
00061 if str(dialog.topic_combo.itemText(index)).find(self._currenttopic) != -1:
00062 dialog.topic_combo.setCurrentIndex(index)
00063 dialog.buffer_size_spin.setValue = self._messagelimit
00064 ok = dialog.exec_()
00065 ok = ok == 1
00066 if ok:
00067 temp = dialog.topic_combo.currentText()
00068 self.subscribe_topic(temp[:temp.find(' (')].strip())
00069 self._messagelimit = dialog.buffer_size_spin.value()
00070 return ok
00071
00072 def unsubscribe_topic(self):
00073 if self._msgcallback is not None:
00074 self._sub.unregister()
00075
00076 def subscribe_topic(self, topic):
00077 if self._msgcallback is not None:
00078 self.unsubscribe_topic()
00079 self._sub = rospy.Subscriber(topic, Log, self._msgcallback)
00080 self._currenttopic = topic
00081
00082 def get_message_limit(self):
00083 return self._messagelimit
00084
00085 def set_message_limit(self, limit):
00086 self._messagelimit = limit