diff --git a/modules/gui/pymod/scene/preset_editor_list_model.py b/modules/gui/pymod/scene/preset_editor_list_model.py index e85a67c05e53ebe8500f986e2d85ab312148bdd9..a30fc13c31f098081f587978d9c0039110fcec42 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 07b433a276f52c8f56da79bef72c85f7b02b5758..186ab48dd1e7006660042e338a97ffb916a689ba 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 40c729672f0204a5fdfb0262e504525e176e4fb7..4b54cb1865981f4ee125fe01a833a54db745daa6 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")