From 40a806c3820ebc93fdf92946b12c751e253e851d Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 5 Aug 2010 14:16:09 +0000 Subject: [PATCH] Improvements for QueryEditorWidget (display error, highlight error) git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2631 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- .../pymod/scene/preset_editor_list_model.py | 2 +- modules/gui/pymod/scene/query_editor.py | 62 ++++++++++++------- modules/mol/base/pymod/export_query.cc | 1 + 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/modules/gui/pymod/scene/preset_editor_list_model.py b/modules/gui/pymod/scene/preset_editor_list_model.py index e85a67c05..a30fc13c3 100644 --- a/modules/gui/pymod/scene/preset_editor_list_model.py +++ b/modules/gui/pymod/scene/preset_editor_list_model.py @@ -45,7 +45,7 @@ class PresetEditorListModel(QtCore.QAbstractListModel): name=data.GetName() selection=str(data.GetSelection()) if(len(selection)>0): - return QtCore.QVariant(str("%s (%s)"%(name,selection))) + return QtCore.QVariant(str("%s (%s)"%(name,selection.replace(os.linesep, " ")))) else: return QtCore.QVariant(str("%s (all)"%name)) return QtCore.QVariant() diff --git a/modules/gui/pymod/scene/query_editor.py b/modules/gui/pymod/scene/query_editor.py index 07b433a27..186ab48dd 100644 --- a/modules/gui/pymod/scene/query_editor.py +++ b/modules/gui/pymod/scene/query_editor.py @@ -5,13 +5,22 @@ class QueryEditorWidget(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) - self.selection_edit_ = QtGui.QLineEdit() - selection_label = QtGui.QLabel("Selection",self) + self.default_font_= QtGui.QTextCharFormat() + self.default_font_.setForeground(QtGui.QBrush(QtGui.QColor(0,0,0))) + self.error_font_= QtGui.QTextCharFormat() + self.error_font_.setForeground(QtGui.QBrush(QtGui.QColor(255,0,0))) + self.selection_edit_ = QtGui.QTextEdit(self) + self.selection_edit_.setMinimumHeight(50) + self.selection_edit_.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.MinimumExpanding)) + self.selection_edit_.updateGeometry() + selection_label = QtGui.QLabel("Selection",self) + self.status_=QtGui.QLabel("",self); self.status_.setWordWrap(True) self.status_.setMargin(0) self.status_.setHidden(True) - + self.status_.setAlignment(QtCore.Qt.AlignRight) + self.status_.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)) self.checkboxes_ = dict() for k,v in mol.QueryFlag.__dict__["values"].iteritems(): checkbox = QtGui.QCheckBox(str(v),self) @@ -26,17 +35,14 @@ class QueryEditorWidget(QtGui.QWidget): flag_label = QtGui.QLabel("Query flags") grid = QtGui.QGridLayout(self) grid.setContentsMargins(0,5,0,0) - grid.addWidget(selection_label,0,0,1,1) + grid.addWidget(selection_label,0,0,1,1,QtCore.Qt.AlignTop|QtCore.Qt.AlignLeft) grid.addWidget(self.selection_edit_,0,1,1,1) - grid.setRowMinimumHeight(1,0) - grid.addWidget(self.status_,1,0,1,2) - grid.addWidget(flag_label,2,0,1,1) - grid.addLayout(v_checkbox_layout,2,1,1,1) - grid.setRowStretch(2, 1) - #group_box = QtGui.QGroupBox("Selection",self) - #group_box.setLayout(h_layout) - - self.connect(self.selection_edit_,QtCore.SIGNAL("textChanged(const QString& )"),self.UpdateMessage) + grid.addWidget(self.status_,1,0,1,2,QtCore.Qt.AlignRight) + grid.addWidget(flag_label,2,0,3,1,QtCore.Qt.AlignTop|QtCore.Qt.AlignLeft) + grid.addLayout(v_checkbox_layout,2,1,3,1) + grid.setRowStretch(0,1) + self.changing_text_=False; + self.connect(self.selection_edit_,QtCore.SIGNAL("textChanged()"),self.UpdateMessage) def GetQueryFlags(self): flag = 0 @@ -46,10 +52,10 @@ class QueryEditorWidget(QtGui.QWidget): return flag def GetQuery(self): - return mol.Query(str(self.selection_edit_.text())) + return mol.Query(str(self.selection_edit_.toPlainText())) def GetQueryText(self): - return str(self.selection_edit_.text()) + return str(self.selection_edit_.toPlainText()) def SetQueryFlags(self,flags): for k,v in self.checkboxes_.iteritems(): @@ -62,12 +68,26 @@ class QueryEditorWidget(QtGui.QWidget): self.selection_edit_.setText(query) def UpdateMessage(self): - q=self.GetQuery() - if q.IsValid(): + if self.changing_text_: + return + self.changing_text_ = True + query=self.GetQuery() + + cursor=self.selection_edit_.textCursor() + cursor.select(QtGui.QTextCursor.Document) + cursor.setCharFormat(self.default_font_) + + if query.IsValid(): self.status_.setText("") self.status_.setHidden(True) - - else: - d=q.GetErrorDescription() + else: + d=query.GetErrorDescription() self.status_.setText("<font color='red'>%s</font>"%d.msg) - self.status_.setVisible(True) \ No newline at end of file + self.status_.setVisible(True) + self.status_.setFixedSize(self.width(),self.status_.height()) + + cursor.movePosition(QtGui.QTextCursor.Start) + cursor.movePosition(QtGui.QTextCursor.NextCharacter, QtGui.QTextCursor.MoveAnchor, d.range.Loc) + cursor.movePosition(QtGui.QTextCursor.NextCharacter, QtGui.QTextCursor.KeepAnchor, d.range.Length) + cursor.setCharFormat(self.error_font_) + self.changing_text_ = False \ No newline at end of file diff --git a/modules/mol/base/pymod/export_query.cc b/modules/mol/base/pymod/export_query.cc index 40c729672..4b54cb186 100644 --- a/modules/mol/base/pymod/export_query.cc +++ b/modules/mol/base/pymod/export_query.cc @@ -42,6 +42,7 @@ void export_Query() class_<QueryErrorDesc>("QueryErrorDesc", no_init) .def_readonly("msg", &QueryErrorDesc::msg) + .def_readonly("range", &QueryErrorDesc::range) ; enum_<QueryFlag::Flag>("QueryFlag") -- GitLab