X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetEditor.cpp;h=7f77acd5a97ac1064fdfd533699a7e85dd71b4ad;hb=8b3ac2b938bd55064a6f260ca7ec9c9a84cd977e;hp=84b63cf2835e12c3ccd399b6cd76a872a158983c;hpb=1ff18f291d213c19795aec6b2addacece50cbabe;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetEditor.cpp b/src/ModuleBase/ModuleBase_WidgetEditor.cpp index 84b63cf28..7f77acd5a 100644 --- a/src/ModuleBase/ModuleBase_WidgetEditor.cpp +++ b/src/ModuleBase/ModuleBase_WidgetEditor.cpp @@ -1,14 +1,18 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: ModuleBase_WidgetEditor.cpp // Created: 25 Apr 2014 // Author: Natalia ERMOLAEVA #include +#include +#include #include #include #include -#include +#include #include #include @@ -19,75 +23,78 @@ #include #include +#include +#include +#include +#include ModuleBase_WidgetEditor::ModuleBase_WidgetEditor(QWidget* theParent, - const Config_WidgetAPI* theData) -: ModuleBase_ModelWidget(theParent, theData) + const Config_WidgetAPI* theData, + const std::string& theParentId) + : ModuleBase_WidgetDoubleValue(theParent, theData, theParentId) { - myEditor = new QLineEdit(0); - myEditor->setWindowFlags(Qt::ToolTip); - myEditor->setFocusPolicy(Qt::StrongFocus); - - connect(myEditor, SIGNAL(returnPressed()), this, SLOT(onStopEditing())); - connect(myEditor, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesChanged())); } ModuleBase_WidgetEditor::~ModuleBase_WidgetEditor() { - delete myEditor; } -bool ModuleBase_WidgetEditor::storeValue(FeaturePtr theFeature) const +double editedValue(double theValue, bool& isDone) { - DataPtr aData = theFeature->data(); - AttributeDoublePtr aReal = aData->real(attributeID()); - bool isOk; - double aValue = myEditor->text().toDouble(&isOk); - if (isOk && aReal->value() != aValue) { - //ModuleBase_WidgetPoint2D* that = (ModuleBase_WidgetPoint2D*) this; - //bool isBlocked = that->blockSignals(true); - aReal->setValue(aValue); - Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_FEATURE_UPDATED)); - //that->blockSignals(isBlocked); - } - return true; -} - -bool ModuleBase_WidgetEditor::restoreValue(FeaturePtr theFeature) -{ - boost::shared_ptr aData = theFeature->data(); - AttributeDoublePtr aRef = aData->real(attributeID()); + QDialog aDlg; + aDlg.setWindowFlags(Qt::FramelessWindowHint); + QHBoxLayout* aLay = new QHBoxLayout(&aDlg); + ModuleBase_Tools::zeroMargins(aLay); - //bool isBlocked = this->blockSignals(true); - myEditor->setText(QString::number(aRef->value())); - //this->blockSignals(isBlocked); - return true; -} + QLineEdit* aEditor = new QLineEdit(QString::number(theValue), &aDlg); + aEditor->setValidator(new QDoubleValidator(aEditor)); + QObject::connect(aEditor, SIGNAL(returnPressed()), &aDlg, SLOT(accept())); + aLay->addWidget(aEditor); -void ModuleBase_WidgetEditor::focusTo() -{ QPoint aPoint = QCursor::pos(); + aDlg.move(aPoint); - myEditor->move(aPoint); - myEditor->show(); - - myEditor->selectAll(); - myEditor->setFocus(); + isDone = aDlg.exec() == QDialog::Accepted; + double aValue = theValue; + if (isDone) + aValue = aEditor->text().toDouble(); + return aValue; } -QWidget* ModuleBase_WidgetEditor::getControl() const +bool ModuleBase_WidgetEditor::focusTo() { - return 0; + // We can not launch here modal process for value editing because + // it can be called on other focusOutWidget event and will block it + QTimer::singleShot(1, this, SLOT(showPopupEditor())); + return true; } -QList ModuleBase_WidgetEditor::getControls() const +void ModuleBase_WidgetEditor::showPopupEditor() { - QList aControls; - return aControls; + // White while all events will be processed + QApplication::processEvents(); + double aValue = mySpinBox->value(); + bool isDone; + aValue = editedValue(aValue, isDone); + + if (isDone) { + bool isBlocked = mySpinBox->blockSignals(true); + mySpinBox->setValue(aValue); + mySpinBox->blockSignals(isBlocked); + } + emit valuesChanged(); + emit focusOutWidget(this); } -void ModuleBase_WidgetEditor::onStopEditing() +void ModuleBase_WidgetEditor::editFeatureValue(FeaturePtr theFeature, + const std::string theAttribute) { - myEditor->hide(); - emit focusOutWidget(this); + DataPtr aData = theFeature->data(); + AttributeDoublePtr aRef = aData->real(theAttribute); + double aValue = aRef->value(); + + bool isDone; + aValue = editedValue(aValue, isDone); + if (isDone) + aRef->setValue(aValue); }