X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetExprEditor.cpp;h=51f982cb0528894d35960ab8e202b153c78f90ee;hb=afbbacca198d72a90472539698aa055bd58c5e56;hp=b8e8ca60e4872d29582e0b222d4bb4d61bbb5c51;hpb=a8b08d1724eee7fb63c1bbb713cc9051366cb230;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetExprEditor.cpp b/src/ModuleBase/ModuleBase_WidgetExprEditor.cpp index b8e8ca60e..51f982cb0 100644 --- a/src/ModuleBase/ModuleBase_WidgetExprEditor.cpp +++ b/src/ModuleBase/ModuleBase_WidgetExprEditor.cpp @@ -1,11 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -/* - * ModuleBase_WidgetExprEditor.cpp - * - * Created on: Aug 28, 2014 - * Author: sbh - */ +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include #include @@ -31,6 +41,8 @@ #include #include #include +#include +#include #include #include @@ -52,6 +64,10 @@ ExpressionEditor::ExpressionEditor(QWidget* theParent) this, SLOT(insertCompletion(const QString&))); (void) new QShortcut(QKeySequence(tr("Ctrl+Space", "Complete")), this, SLOT(performCompletion())); + + connect(this, SIGNAL(textChanged()), this, SLOT(onTextChanged())); + + setTabChangesFocus(true); } ExpressionEditor::~ExpressionEditor() @@ -86,9 +102,7 @@ void ExpressionEditor::performCompletion() QTextCursor aCursor = textCursor(); aCursor.select(QTextCursor::WordUnderCursor); const QString aPrefix = aCursor.selectedText(); - if (!aPrefix.isEmpty() && aPrefix.at(aPrefix.length() - 1).isLetter()) { - performCompletion(aPrefix); - } + performCompletion(aPrefix); } void ExpressionEditor::performCompletion(const QString& theCompletionPrefix) @@ -117,16 +131,28 @@ void ExpressionEditor::keyPressEvent(QKeyEvent* theEvent) switch (theEvent->key()) { case Qt::Key_Up: case Qt::Key_Down: + case Qt::Key_Escape: case Qt::Key_Enter: case Qt::Key_Return: - case Qt::Key_Escape: theEvent->ignore(); - return; + return; default: myCompleter->popup()->hide(); break; } } + else { + switch (theEvent->key()) { + case Qt::Key_Enter: + case Qt::Key_Return: + emit keyReleased(this, theEvent); + // do not react to the Enter key, the property panel processes it + return; + break; + default: + break; + } + } QPlainTextEdit::keyPressEvent(theEvent); } @@ -178,19 +204,23 @@ void ExpressionEditor::paintEvent( QPaintEvent* theEvent ) QPen anOldpen = aPainter.pen(); aPainter.setPen( aColor ); lineRect.adjust(minLB, 0, 0, 0); - QString elidedText = aFontMetrics.elidedText( myPlaceHolderText, Qt::ElideRight, lineRect.width() ); + QString elidedText = + aFontMetrics.elidedText( myPlaceHolderText, Qt::ElideRight, lineRect.width() ); aPainter.drawText( lineRect, va, elidedText ); aPainter.setPen( anOldpen ); } } +void ExpressionEditor::onTextChanged() +{ + emit valueModified(); +} ModuleBase_WidgetExprEditor::ModuleBase_WidgetExprEditor( QWidget* theParent, const Config_WidgetAPI* theData, - const std::string& theParentId, const std::string& thePlaceHolder ) - : ModuleBase_ModelWidget(theParent, theData, theParentId) +: ModuleBase_ModelWidget(theParent, theData) { QVBoxLayout* aMainLay = new QVBoxLayout(this); ModuleBase_Tools::adjustMargins(aMainLay); @@ -207,27 +237,43 @@ ModuleBase_WidgetExprEditor::ModuleBase_WidgetExprEditor( QWidget* theParent, aMainLay->addWidget(myEditor); this->setLayout(aMainLay); - connect(myEditor, SIGNAL(textChanged()), this, SLOT(onTextChanged())); + connect(myEditor, SIGNAL(valueModified()), this, SIGNAL(valuesModified())); + connect(myEditor, SIGNAL(keyReleased(QObject*, QKeyEvent*)), + this, SIGNAL(keyReleased(QObject*, QKeyEvent*))); } ModuleBase_WidgetExprEditor::~ModuleBase_WidgetExprEditor() { } -bool ModuleBase_WidgetExprEditor::storeValueCustom() const +void ModuleBase_WidgetExprEditor::activateCustom() +{ + ModuleBase_ModelWidget::activateCustom(); + + QStringList aParameters; + ModuleBase_Tools::getParameters(aParameters); + myEditor->setCompletionList(aParameters); +} + +void ModuleBase_WidgetExprEditor::initializeValueByActivate() +{ +} + +bool ModuleBase_WidgetExprEditor::storeValueCustom() { - // A rare case when plugin was not loaded. + // A rare case when plugin was not loaded. if(!myFeature) return false; DataPtr aData = myFeature->data(); AttributeStringPtr aStringAttr = aData->string(attributeID()); + QString aWidgetValue = myEditor->toPlainText(); aStringAttr->setValue(aWidgetValue.toStdString()); updateObject(myFeature); // Try to get the value QString aStateMsg; - std::string anErrorMessage = myFeature->error(); + std::string anErrorMessage = myFeature->string("ExpressionError")->value(); if (anErrorMessage.empty()) { ResultParameterPtr aParam = std::dynamic_pointer_cast(myFeature->firstResult()); @@ -240,7 +286,7 @@ bool ModuleBase_WidgetExprEditor::storeValueCustom() const } } } else { - aStateMsg = QString::fromStdString(anErrorMessage); + aStateMsg = "Error: " + QString::fromStdString(anErrorMessage); } myResultLabel->setText(aStateMsg); return true; @@ -248,7 +294,7 @@ bool ModuleBase_WidgetExprEditor::storeValueCustom() const bool ModuleBase_WidgetExprEditor::restoreValueCustom() { - // A rare case when plugin was not loaded. + // A rare case when plugin was not loaded. if(!myFeature) return false; DataPtr aData = myFeature->data(); @@ -273,7 +319,17 @@ QList ModuleBase_WidgetExprEditor::getControls() const return result; } +bool ModuleBase_WidgetExprEditor::processEnter() +{ + bool isModified = getValueState() == ModifiedInPP; + if (isModified) { + emit valuesChanged(); + myEditor->selectAll(); + } + return isModified; +} + void ModuleBase_WidgetExprEditor::onTextChanged() { - storeValue(); + emit valuesChanged(); }