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
00034
00035 import os
00036 from collections import OrderedDict
00037
00038 import dynamic_reconfigure.client
00039 from python_qt_binding import loadUi
00040 from python_qt_binding.QtCore import Qt, Signal
00041 from python_qt_binding.QtGui import QVBoxLayout, QWidget, QWidgetItem
00042 from rqt_py_common.layout_util import LayoutUtil
00043 import rospy
00044
00045 from .dynreconf_client_widget import DynreconfClientWidget
00046
00047
00048 class ParameditWidget(QWidget):
00049 """
00050 This class represents a pane where parameter editor widgets of multiple
00051 nodes are shown. In rqt_reconfigure, this pane occupies right half of the
00052 entire visible area.
00053 """
00054
00055
00056 sig_node_disabled_selected = Signal(str)
00057
00058 def __init__(self, rospack):
00059 """"""
00060 super(ParameditWidget, self).__init__()
00061
00062 ui_file = os.path.join(rospack.get_path('rqt_reconfigure'),
00063 'resource', 'paramedit_pane.ui')
00064 loadUi(ui_file, self, {'ParameditWidget': ParameditWidget})
00065
00066 self._dynreconf_clients = OrderedDict()
00067
00068
00069 self.vlayout = QVBoxLayout(self.scrollarea_holder_widget)
00070
00071
00072 self.destroyed.connect(self.close)
00073
00074 def _set_index_widgets(self, view, paramitems_dict):
00075 """
00076 @deprecated: Causes error
00077 """
00078 i = 0
00079 for p in paramitems_dict:
00080 view.setIndexWidget(i, p)
00081 i += 1
00082
00083 def show_reconf(self, dynreconf_widget):
00084 """
00085 Callback when user chooses a node.
00086
00087 @param dynreconf_widget:
00088 """
00089 node_grn = dynreconf_widget.get_node_grn()
00090 rospy.logdebug('ParameditWidget.show str(node_grn)=%s', str(node_grn))
00091
00092 if not node_grn in self._dynreconf_clients.keys():
00093
00094
00095
00096
00097 self._dynreconf_clients.__setitem__(node_grn, dynreconf_widget)
00098 self.vlayout.addWidget(dynreconf_widget)
00099 dynreconf_widget.sig_node_disabled_selected.connect(
00100 self._node_disabled)
00101
00102 else:
00103 self._remove_node(node_grn)
00104
00105
00106
00107
00108
00109
00110
00111
00112 LayoutUtil.alternate_color(self._dynreconf_clients.itervalues(),
00113 [self.palette().background().color().lighter(125),
00114 self.palette().background().color().darker(125)])
00115
00116 def close(self):
00117 for dc in self._dynreconf_clients:
00118
00119 dc.close()
00120 dc = None
00121
00122 self._paramedit_scrollarea.deleteLater()
00123
00124 def filter_param(self, filter_key):
00125 """
00126 :type filter_key:
00127 """
00128
00129
00130
00131
00132
00133
00134 pass
00135
00136 def _remove_node(self, node_grn):
00137 try:
00138 i = self._dynreconf_clients.keys().index(node_grn)
00139 except ValueError:
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 return
00150
00151 item = self.vlayout.itemAt(i)
00152 if isinstance(item, QWidgetItem):
00153 item.widget().close()
00154 w = self._dynreconf_clients.pop(node_grn)
00155
00156 rospy.logdebug('popped={} Len of left clients={}'.format(
00157 w, len(self._dynreconf_clients)))
00158
00159 def _node_disabled(self, node_grn):
00160 rospy.logdebug('paramedit_w _node_disabled grn={}'.format(node_grn))
00161
00162
00163
00164 self.sig_node_disabled_selected.emit(node_grn)
00165
00166
00167 self._remove_node(node_grn)