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