: QWidget(theParent),
myParentId(theParentId),
myIsEditing(false),
- myState(Stored)
+ myState(Stored),
+ myIsValueStateBlocked(false)
{
myDefaultValue = theData->getProperty(ATTR_DEFAULT);
myUseReset = theData->getBooleanAttribute(ATTR_USE_RESET, true);
connect(this, SIGNAL(valuesModified()), this, SLOT(onWidgetValuesModified()));
}
+bool ModuleBase_ModelWidget::reset()
+{
+ bool aResult = resetCustom();
+ if (aResult)
+ setValueState(Reset);
+
+ return aResult;
+}
+
bool ModuleBase_ModelWidget::isInitialized(ObjectPtr theObject) const
{
return theObject->data()->attribute(attributeID())->isInitialized();
// It should happens in the creation mode only because all fields are filled in the edition mode
if (!isEditingMode()) {
AttributePtr anAttribute = myFeature->data()->attribute(myAttributeID);
- if (anAttribute.get() != NULL && !anAttribute->isInitialized()) {
- if (isComputedDefault()) {
- if (myFeature->compute(myAttributeID)) {
- restoreValue();
- }
- }
- else {
- storeValue();
- }
- }
+ if (anAttribute.get() != NULL && !anAttribute->isInitialized())
+ initializeValueByActivate();
}
activateCustom();
}
+void ModuleBase_ModelWidget::deactivate()
+{
+ myIsValueStateBlocked = false;
+ if (myState == ModifiedInPP)
+ storeValue();
+ myState = Stored;
+}
+
+void ModuleBase_ModelWidget::initializeValueByActivate()
+{
+ if (isComputedDefault()) {
+ if (myFeature->compute(myAttributeID)) {
+ restoreValue();
+ }
+ }
+ else {
+ storeValue();
+ }
+}
+
+QWidget* ModuleBase_ModelWidget::getControlAcceptingFocus(const bool isFirst)
+{
+ QWidget* aControl = 0;
+
+ QList<QWidget*> aControls = getControls();
+ int aSize = aControls.size();
+
+ if (isFirst) {
+ for (int i = 0; i < aSize && !aControl; i++) {
+ if (aControls[i]->focusPolicy() != Qt::NoFocus)
+ aControl = aControls[i];
+ }
+ }
+ else {
+ for (int i = aSize - 1; i >= 0 && !aControl; i--) {
+ if (aControls[i]->focusPolicy() != Qt::NoFocus)
+ aControl = aControls[i];
+ }
+ }
+ return aControl;
+}
+
void ModuleBase_ModelWidget::setDefaultValue(const std::string& theValue)
{
myDefaultValue = theValue;
return isDone;
}
-void ModuleBase_ModelWidget::setValueState(const ValueState& theState)
+ModuleBase_ModelWidget::ValueState ModuleBase_ModelWidget::setValueState(const ModuleBase_ModelWidget::ValueState& theState)
{
- if (myState == theState)
- return;
+ ValueState aState = myState;
+ if (myState != theState && !myIsValueStateBlocked) {
+ myState = theState;
+ emit valueStateChanged(aState);
+ }
+ return aState;
+}
- myState = theState;
- emit valueStateChanged();
+bool ModuleBase_ModelWidget::blockValueState(const bool theBlocked)
+{
+ bool isBlocked = myIsValueStateBlocked;
+ myIsValueStateBlocked = theBlocked;
+ return isBlocked;
}
bool ModuleBase_ModelWidget::restoreValue()
return isDone;
}
-void ModuleBase_ModelWidget::storeValueByApply()
-{
- // do not emit signal about update the currenty feature object
- // in order to do not perform additional redisplay in the viewer.
- // It should happens by finish operation of the apply action
- storeValueCustom();
-}
-
void ModuleBase_ModelWidget::updateObject(ObjectPtr theObj)
{
blockUpdateViewer(true);
//blockUpdateViewer(false);
}
-bool ModuleBase_ModelWidget::isEventProcessed(QKeyEvent* theEvent)
+bool ModuleBase_ModelWidget::processEnter()
{
return false;
}
emit focusInWidget(this);
}
}
+ else if (theEvent->type() == QEvent::FocusOut) {
+ QFocusEvent* aFocusEvent = dynamic_cast<QFocusEvent*>(theEvent);
+
+ Qt::FocusReason aReason = aFocusEvent->reason();
+ bool aMouseOrKey = aReason == Qt::MouseFocusReason ||
+ aReason == Qt::TabFocusReason ||
+ aReason == Qt::BacktabFocusReason ||
+ aReason == Qt::OtherFocusReason; // to process widget->setFocus()
+ if (aMouseOrKey && getControls().contains(aWidget) && getValueState() == ModifiedInPP)
+ storeValue();
+ }
// pass the event on to the parent class
return QObject::eventFilter(theObject, theEvent);
//**************************************************************
void ModuleBase_ModelWidget::onWidgetValuesModified()
{
- setValueState(Modified);
+ setValueState(ModifiedInPP);
}
//**************************************************************