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 import os
00034 import rospkg
00035
00036 from python_qt_binding import loadUi
00037 from python_qt_binding.QtCore import qWarning
00038 from python_qt_binding.QtGui import QWidget
00039
00040
00041 class LoggerLevelWidget(QWidget):
00042 """
00043 Widget for use with LoggerLevelServiceCaller class to alter the ROS logger levels
00044 """
00045 def __init__(self, caller):
00046 """
00047 :param caller: service caller instance for sending service calls, ''LoggerLevelServiceCaller''
00048 """
00049 super(LoggerLevelWidget, self).__init__()
00050 rp = rospkg.RosPack()
00051 ui_file = os.path.join(rp.get_path('rqt_logger_level'), 'resource', 'logger_level.ui')
00052 loadUi(ui_file, self)
00053 self.setObjectName('LoggerLevelWidget')
00054 self._caller = caller
00055
00056 self.node_list.currentRowChanged[int].connect(self.node_changed)
00057 self.logger_list.currentRowChanged[int].connect(self.logger_changed)
00058 self.level_list.currentRowChanged[int].connect(self.level_changed)
00059 self.refresh_button.clicked[bool].connect(self.refresh_nodes)
00060
00061 self.refresh_nodes()
00062 if self.node_list.count() > 0:
00063 self.node_list.setCurrentRow(0)
00064
00065 def refresh_nodes(self):
00066 """
00067 Refreshes the top level node list and repoulates the node_list widget.
00068 As a side effect the level and logger lists are cleared
00069 """
00070 self.level_list.clear()
00071 self.logger_list.clear()
00072 self.node_list.clear()
00073 for name in self._caller.get_node_names():
00074 self.node_list.addItem(name)
00075
00076 def node_changed(self, row):
00077 """
00078 Handles the rowchanged event for the node_list widget
00079 Populates logger_list with the loggers for the node selected
00080 :param row: the selected row in node_list, ''int''
00081 """
00082 if row == -1:
00083 return
00084 if row < 0 or row >= self.node_list.count():
00085 qWarning('Node row %s out of bounds. Current count: %s' % (row, self.node_list.count()))
00086 return
00087 self.logger_list.clear()
00088 self.level_list.clear()
00089 loggers = self._caller.get_loggers(self.node_list.item(row).text())
00090 if len(loggers) == 0:
00091 return
00092 for logger in sorted(loggers):
00093 self.logger_list.addItem(logger)
00094 if self.logger_list.count() != 0:
00095 self.logger_list.setCurrentRow(0)
00096
00097 def logger_changed(self, row):
00098 """
00099 Handles the rowchanged event for the logger_list widget
00100 Populates level_list with the levels for the logger selected
00101 :param row: the selected row in logger_list, ''int''
00102 """
00103 if row == -1:
00104 return
00105 if row < 0 or row >= self.logger_list.count():
00106 qWarning('Logger row %s out of bounds. Current count: %s' % (row, self.logger_list.count()))
00107 return
00108 if self.level_list.count() == 0:
00109 for level in self._caller.get_levels():
00110 self.level_list.addItem(level)
00111 for index in range(self.level_list.count()):
00112 if self.level_list.item(index).text().lower() == self._caller._current_levels[self.logger_list.currentItem().text()].lower():
00113 self.level_list.setCurrentRow(index)
00114
00115 def level_changed(self, row):
00116 """
00117 Handles the rowchanged event for the level_list widget
00118 Makes a service call to change the logger level for the indicated node/logger to the selected value
00119 :param row: the selected row in level_list, ''int''
00120 """
00121 if row == -1:
00122 return
00123 if row < 0 or row >= self.level_list.count():
00124 qWarning('Level row %s out of bounds. Current count: %s' % (row, self.level_list.count()))
00125 return
00126 self._caller.send_logger_change_message(self.node_list.currentItem().text(), self.logger_list.currentItem().text(), self.level_list.item(row).text())