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,18 @@ 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+ f'Invalid parameters: { e } ' )
126+
127+ self .filter_widget .control_widget .node_name_edit .setStyleSheet (
128+ 'QLineEdit { '
129+ 'border-style: outset;'
130+ 'border-width: 1px;'
131+ 'border-color: red; }' )
132+ return
122133 self .tree_model .set_tree_roots (p )
123134 self .tree_view .set_filtered (True )
124135 # applying the filter will always invalidate the current overlay
@@ -514,6 +525,8 @@ def __init__(self, parent=None):
514525 self .setObjectName ("FilterTreePane" )
515526 self .control_widget = FilterPane .ControlWidget (self )
516527
528+ self .control_widget .node_name_edit .textChanged .connect (
529+ self .restore_style )
517530 self .control_widget .node_name_edit .returnPressed .connect (
518531 self .on_apply_clicked
519532 )
@@ -529,3 +542,7 @@ def on_apply_clicked(self):
529542
530543 def set_enabled (self , enabled ):
531544 self .control_widget .setEnabled (enabled )
545+
546+ def restore_style (self ):
547+ self .control_widget .node_name_edit .setStyleSheet ('' )
548+ self .control_widget .node_name_edit .setToolTip ('' )
0 commit comments