2222
2323from PyQt5 import QtGui , QtCore , QtWidgets
2424
25- from rocketpilot .exceptions import StateNotFoundError
25+ from rocketpilot .exceptions import InvalidXPathQuery , StateNotFoundError
2626from rocketpilot .introspection .qt import QtObjectProxyMixin
2727from rocketpilot .vis .objectproperties import TreeNodeDetailWidget
2828
@@ -118,7 +118,20 @@ def on_filter(self, attr_name, attr_value):
118118
119119 if self .proxy_object :
120120 self .proxy_object .refresh_state ()
121- p = self .proxy_object .select_many (** filter )
121+ try :
122+ p = self .proxy_object .select_many (** filter )
123+ except InvalidXPathQuery as e :
124+ self .filter_widget .control_widget .node_name_edit .setToolTip (
125+ 'Invalid parameters' )
126+
127+ self .filter_widget .control_widget .node_name_edit .setStyleSheet (
128+ 'border-style: outset;'
129+ 'border-width: 1px;'
130+ 'border-color: red;' )
131+
132+ print (f'Invalid property name { attr_name !r} , '
133+ f'value: { attr_value !r} , error: { e } ' )
134+ return
122135 self .tree_model .set_tree_roots (p )
123136 self .tree_view .set_filtered (True )
124137 # applying the filter will always invalidate the current overlay
@@ -514,6 +527,8 @@ def __init__(self, parent=None):
514527 self .setObjectName ("FilterTreePane" )
515528 self .control_widget = FilterPane .ControlWidget (self )
516529
530+ self .control_widget .node_name_edit .textChanged .connect (
531+ self .restore_style )
517532 self .control_widget .node_name_edit .returnPressed .connect (
518533 self .on_apply_clicked
519534 )
@@ -529,3 +544,6 @@ def on_apply_clicked(self):
529544
530545 def set_enabled (self , enabled ):
531546 self .control_widget .setEnabled (enabled )
547+
548+ def restore_style (self ):
549+ self .control_widget .node_name_edit .setStyleSheet ('' )
0 commit comments