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 Qt
00038 from python_qt_binding.QtGui import QPalette, QWidget
00039
00040 from rqt_py_common.ini_helper import pack, unpack
00041
00042
00043 class CustomFilterWidget(QWidget):
00044 def __init__(self, parentfilter, rospack, item_providers):
00045 super(CustomFilterWidget, self).__init__()
00046 ui_file = os.path.join(rospack.get_path('rqt_console'), 'resource/filters', 'custom_filter_widget.ui')
00047 loadUi(ui_file, self)
00048 self.setObjectName('CustomFilterWidget')
00049 self._parentfilter = parentfilter
00050
00051
00052 for list_widget in [self.severity_list, self.node_list, self.topic_list]:
00053 active_color = list_widget.palette().brush(QPalette.Active, QPalette.Highlight).color().name()
00054 list_widget.setStyleSheet('QListWidget:item:selected:!active { background: %s; }' % active_color)
00055
00056
00057 self.text_edit.textChanged.connect(self.handle_text_changed)
00058 self.regex_check_box.clicked[bool].connect(self.handle_regex_clicked)
00059 self.handle_text_changed()
00060
00061
00062 self.severity_list.itemSelectionChanged.connect(self.handle_severity_item_changed)
00063 new_items = item_providers[0]()
00064 for key in sorted(new_items.keys()):
00065 item = new_items[key]
00066 self.severity_list.addItem(item)
00067 self.severity_list.item(self.severity_list.count() - 1).setData(Qt.UserRole, key)
00068
00069
00070 self._node_list_populate_function = item_providers[1]
00071 self.node_list.itemSelectionChanged.connect(self.handle_node_item_changed)
00072
00073
00074 self._topic_list_populate_function = item_providers[2]
00075 self.topic_list.itemSelectionChanged.connect(self.handle_topic_item_changed)
00076
00077 self.repopulate()
00078
00079 def handle_node_item_changed(self):
00080 self._parentfilter._node.set_selected_items(self.node_list.selectedItems())
00081
00082 def handle_topic_item_changed(self):
00083 self._parentfilter._topic.set_selected_items(self.topic_list.selectedItems())
00084
00085 def handle_severity_item_changed(self):
00086 self._parentfilter._severity.set_selected_items(self.severity_list.selectedItems())
00087
00088 def handle_text_changed(self):
00089 self._parentfilter._message.set_text(self.text_edit.text())
00090
00091 def handle_regex_clicked(self, clicked):
00092 self._parentfilter._message.set_regex(clicked)
00093
00094 def repopulate(self):
00095 """
00096 Repopulates the display widgets based on the function arguments passed
00097 in during initialization
00098 """
00099 newset = self._topic_list_populate_function()
00100 for item in newset:
00101 if len(self.topic_list.findItems(item, Qt.MatchExactly)) == 0:
00102 self._add_item(self.topic_list, item)
00103
00104 newset = self._node_list_populate_function()
00105 for item in newset:
00106 if len(self.node_list.findItems(item, Qt.MatchExactly)) == 0:
00107 self._add_item(self.node_list, item)
00108
00109 def _add_item(self, list_widget, item):
00110 """
00111 Insert item in alphabetical order.
00112 """
00113 for i in range(list_widget.count()):
00114 if item <= list_widget.item(i).text():
00115 list_widget.insertItem(i, item)
00116 return
00117 list_widget.addItem(item)
00118
00119 def save_settings(self, settings):
00120 """
00121 Saves the settings for this filter to an ini file.
00122 :param settings: used to write the settings to an ini file ''qt_gui.settings.Settings''
00123 """
00124 settings.set_value('text', self._parentfilter._message._text)
00125 settings.set_value('regex', self._parentfilter._message._regex)
00126
00127 settings.set_value('severityitemlist', pack(self._parentfilter._severity._selected_items))
00128
00129 settings.set_value('topicitemlist', pack(self._parentfilter._topic._selected_items))
00130
00131 settings.set_value('nodeitemlist', pack(self._parentfilter._node._selected_items))
00132
00133 return
00134
00135 def restore_settings(self, settings):
00136 """
00137 Restores the settings for this filter from an ini file.
00138 :param settings: used to extract the settings from an ini file ''qt_gui.settings.Settings''
00139 """
00140 text = settings.value('text', '')
00141 self.text_edit.setText(text)
00142 self.handle_text_changed()
00143
00144 regex = settings.value('regex') in [True, 'true']
00145 self.regex_check_box.setChecked(regex)
00146 self.handle_regex_clicked(regex)
00147
00148
00149 for index in range(self.severity_list.count()):
00150 self.severity_list.item(index).setSelected(False)
00151 severity_item_list = unpack(settings.value('severityitemlist'))
00152 for item in severity_item_list:
00153 items = self.severity_list.findItems(item, Qt.MatchExactly)
00154 for item in items:
00155 item.setSelected(True)
00156 self.handle_severity_item_changed()
00157
00158
00159 for index in range(self.topic_list.count()):
00160 self.topic_list.item(index).setSelected(False)
00161 topic_item_list = unpack(settings.value('topicitemlist'))
00162 for item in topic_item_list:
00163 if len(self.topic_list.findItems(item, Qt.MatchExactly)) == 0:
00164 self.topic_list.addItem(item)
00165 items = self.topic_list.findItems(item, Qt.MatchExactly)
00166 for item in items:
00167 item.setSelected(True)
00168 self.handle_topic_item_changed()
00169
00170
00171 for index in range(self.node_list.count()):
00172 self.node_list.item(index).setSelected(False)
00173 node_item_list = unpack(settings.value('nodeitemlist'))
00174 for item in node_item_list:
00175 if len(self.node_list.findItems(item, Qt.MatchExactly)) == 0:
00176 self.node_list.addItem(item)
00177 items = self.node_list.findItems(item, Qt.MatchExactly)
00178 for item in items:
00179 item.setSelected(True)
00180 self.handle_node_item_changed()