Sketcher: Change enter behavior on OVP to put OVP in lock state only

This patch adds/changes a couple of things:
* if you press enter on a label now, it moves you to another label and
  adds the label and lock on the previous label, instead of previous behavior
  where it was accepting whole dimension
* if you press enter and have lock state on both labels then you move to
  next stage
* if you press ctrl+enter it's as is if you'd press enter on both labels
  (the object becomes constrained with whatever dimensions that were in
  both labels)
* tab still works the same way
* you can remove "Lock" state from the label by typing something
  additional or removing the dimension at all
This commit is contained in:
tetektoza
2025-06-11 23:59:07 +02:00
parent 889d708992
commit ef0b259097
14 changed files with 163 additions and 18 deletions

View File

@@ -365,8 +365,33 @@ public:
}
}
void finishEditingOnAllOVPs()
{
// we call this on a current OnViewParameter when pressed CTRL+ENTER to accept
// input on all visible ovps of current mode
// we check for initial state, since `onViewValueChanged` can process to next mode
// if we set hasFinishedEditing on current mode
auto initialState = handler->state();
for (size_t i = 0; i < onViewParameters.size(); i++) {
if (isOnViewParameterOfCurrentMode(i) && isOnViewParameterVisible(i) && initialState == getState(static_cast<int>(i))) {
onViewParameters[i]->isSet = true;
onViewParameters[i]->hasFinishedEditing = true;
double currentValue = onViewParameters[i]->getValue();
onViewValueChanged(static_cast<int>(i), currentValue);
}
}
}
void tryViewValueChanged(int onviewparameterindex, double value)
{
// go only to next label if user has currently pressed enter on current one
int nextindex = onviewparameterindex + 1;
if (onViewParameters[onviewparameterindex]->hasFinishedEditing && isOnViewParameterOfCurrentMode(nextindex)) {
setFocusToOnViewParameter(nextindex);
}
/* That is not supported with on-view parameters.
// -> A machine does not forward to a next state when adapting the parameter (though it
// may forward to
@@ -628,6 +653,13 @@ protected:
unsetOnViewParameter(parameter);
finishControlsChanged();
});
// Connect Ctrl+Enter signal to apply values to all visible OVPs in current stage
QObject::connect(parameter,
&Gui::EditableDatumLabel::finishEditingOnAllOVPs,
[this]() {
finishEditingOnAllOVPs();
});
}
}

View File

@@ -729,7 +729,7 @@ void DSHArcController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
@@ -743,7 +743,7 @@ void DSHArcController::doChangeDrawSketchHandlerMode()
else {
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing && sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}

View File

@@ -792,7 +792,7 @@ void DSHArcSlotController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;

View File

@@ -1096,7 +1096,7 @@ void DSHBSplineController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->canGoToNextMode(); // its not going to next mode
unsetOnViewParameter(thirdParam.get());

View File

@@ -630,7 +630,7 @@ void DSHCircleController::doChangeDrawSketchHandlerMode()
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing && sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -705,7 +705,7 @@ void DSHEllipseController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
@@ -720,7 +720,7 @@ void DSHEllipseController::doChangeDrawSketchHandlerMode()
}
else {
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing && sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}

View File

@@ -571,7 +571,7 @@ void DSHLineController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -234,7 +234,7 @@ void DSHPointController::doChangeDrawSketchHandlerMode()
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->hasFinishedEditing || secondParam->hasFinishedEditing) {
if (firstParam->hasFinishedEditing && secondParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
// handler->finish(); // Called by the change of mode
}

View File

@@ -463,7 +463,7 @@ void DSHPolygonController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -2353,7 +2353,7 @@ void DSHRectangleController::doChangeDrawSketchHandlerMode()
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
&& onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
if (handler->roundCorners || handler->makeFrame
|| handler->constructionMethod() == ConstructionMethod::ThreePoints
@@ -2387,7 +2387,7 @@ void DSHRectangleController::doChangeDrawSketchHandlerMode()
}
else {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
&& onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
if (handler->roundCorners || handler->makeFrame) {
handler->setState(SelectMode::SeekFourth);
}

View File

@@ -550,7 +550,7 @@ void DSHSlotController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;

View File

@@ -721,7 +721,7 @@ void DSHTranslateController::doChangeDrawSketchHandlerMode()
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (thirdParam->hasFinishedEditing && fourthParam->hasFinishedEditing) {
if (handler->secondNumberOfCopies == 1) {
handler->setState(SelectMode::End);
}
@@ -734,7 +734,7 @@ void DSHTranslateController::doChangeDrawSketchHandlerMode()
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing && sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;