From 88ee1d6df3cbca8783954acb8d01dbb5f17498f1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 23 Jul 2024 08:25:37 +0200 Subject: [PATCH] FEM: Fix convoluted event handling of constraint task boxes and make Delete key working on macOS --- src/Mod/Fem/Gui/TaskFemConstraint.cpp | 48 ++++++++----------- src/Mod/Fem/Gui/TaskFemConstraint.h | 3 +- src/Mod/Fem/Gui/TaskFemConstraintBearing.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintBearing.h | 1 - .../Fem/Gui/TaskFemConstraintDisplacement.cpp | 5 -- .../Fem/Gui/TaskFemConstraintDisplacement.h | 1 - src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintFixed.h | 1 - .../Gui/TaskFemConstraintFluidBoundary.cpp | 5 -- .../Fem/Gui/TaskFemConstraintFluidBoundary.h | 1 - src/Mod/Fem/Gui/TaskFemConstraintForce.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintForce.h | 1 - src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h | 1 - .../Gui/TaskFemConstraintPlaneRotation.cpp | 5 -- .../Fem/Gui/TaskFemConstraintPlaneRotation.h | 1 - src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintPressure.h | 1 - .../Fem/Gui/TaskFemConstraintRigidBody.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintRigidBody.h | 1 - src/Mod/Fem/Gui/TaskFemConstraintSpring.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintSpring.h | 1 - .../Fem/Gui/TaskFemConstraintTemperature.cpp | 5 -- .../Fem/Gui/TaskFemConstraintTemperature.h | 1 - .../Fem/Gui/TaskFemConstraintTransform.cpp | 5 -- src/Mod/Fem/Gui/TaskFemConstraintTransform.h | 1 - 26 files changed, 23 insertions(+), 100 deletions(-) diff --git a/src/Mod/Fem/Gui/TaskFemConstraint.cpp b/src/Mod/Fem/Gui/TaskFemConstraint.cpp index 7c6df2430f..308088b66b 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraint.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraint.cpp @@ -59,12 +59,32 @@ TaskFemConstraint::TaskFemConstraint(ViewProviderFemConstraint* ConstraintView, , proxy(nullptr) , deleteAction(nullptr) , ConstraintView(ConstraintView) + , selectionMode(selref) +{} + +bool TaskFemConstraint::event(QEvent* event) { - selectionMode = selref; + if (event && event->type() == QEvent::ShortcutOverride) { + auto ke = static_cast(event); // NOLINT + if (deleteAction) { + if (ke->matches(QKeySequence::Delete) || ke->matches(QKeySequence::Backspace)) { + ke->accept(); + } + } + } + return TaskBox::event(event); } void TaskFemConstraint::keyPressEvent(QKeyEvent* ke) { + // if we have a Del key, trigger the deleteAction + if (ke->matches(QKeySequence::Delete) || ke->matches(QKeySequence::Backspace)) { + if (deleteAction && deleteAction->isEnabled()) { + ke->accept(); + deleteAction->trigger(); + } + } + TaskBox::keyPressEvent(ke); } @@ -157,32 +177,6 @@ void TaskFemConstraint::createDeleteAction(QListWidget* parentList) parentList->setContextMenuPolicy(Qt::ActionsContextMenu); } -bool TaskFemConstraint::KeyEvent(QEvent* e) -{ - // in case another instance takes key events, accept the overridden key even - if (e && e->type() == QEvent::ShortcutOverride) { - QKeyEvent* kevent = static_cast(e); - if (kevent->modifiers() == Qt::NoModifier) { - if (deleteAction && kevent->key() == Qt::Key_Delete) { - kevent->accept(); - return true; - } - } - } - // if we have a Del key, trigger the deleteAction - else if (e && e->type() == QEvent::KeyPress) { - QKeyEvent* kevent = static_cast(e); - if (kevent->key() == Qt::Key_Delete) { - if (deleteAction && deleteAction->isEnabled()) { - deleteAction->trigger(); - } - return true; - } - } - - return TaskFemConstraint::event(e); -} - //************************************************************************** //************************************************************************** // TaskDialog diff --git a/src/Mod/Fem/Gui/TaskFemConstraint.h b/src/Mod/Fem/Gui/TaskFemConstraint.h index e3bebfbf1f..3f6f9189d3 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraint.h +++ b/src/Mod/Fem/Gui/TaskFemConstraint.h @@ -62,6 +62,8 @@ protected Q_SLOTS: void onButtonReference(const bool pressed = true); void setSelection(QListWidgetItem* item); + bool event(QEvent* event) override; + protected: void changeEvent(QEvent* e) override { @@ -71,7 +73,6 @@ protected: const QString makeRefText(const App::DocumentObject* obj, const std::string& subName) const; void keyPressEvent(QKeyEvent* ke) override; void createDeleteAction(QListWidget* parentList); - bool KeyEvent(QEvent* e); void onSelectionChanged(const Gui::SelectionChanges&) override {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintBearing.cpp b/src/Mod/Fem/Gui/TaskFemConstraintBearing.cpp index 7dba042486..035c217b77 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintBearing.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintBearing.cpp @@ -309,11 +309,6 @@ bool TaskFemConstraintBearing::getAxial() const TaskFemConstraintBearing::~TaskFemConstraintBearing() = default; -bool TaskFemConstraintBearing::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintBearing::changeEvent(QEvent* e) { TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintBearing.h b/src/Mod/Fem/Gui/TaskFemConstraintBearing.h index 61d6c65f69..a03fbcf268 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintBearing.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintBearing.h @@ -69,7 +69,6 @@ private Q_SLOTS: void onCheckAxial(bool); protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void onSelectionChanged(const Gui::SelectionChanges& msg) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp index 0ccf30f814..d1851b9333 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp @@ -477,11 +477,6 @@ bool TaskFemConstraintDisplacement::get_useFlowSurfaceForce() const return ui->FlowForceCB->isChecked(); } -bool TaskFemConstraintDisplacement::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintDisplacement::changeEvent(QEvent*) { // TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.h b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.h index 5781953ae0..a1ecebdb04 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.h @@ -85,7 +85,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp b/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp index 1bcb45f9b6..05cfbd9eaf 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp @@ -247,11 +247,6 @@ const std::string TaskFemConstraintFixed::getReferences() const return TaskFemConstraint::getReferences(items); } -bool TaskFemConstraintFixed::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintFixed::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFixed.h b/src/Mod/Fem/Gui/TaskFemConstraintFixed.h index e7efbe4c98..81d8f45731 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFixed.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintFixed.h @@ -51,7 +51,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp index 4055c5d0eb..cc66150d78 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp @@ -951,11 +951,6 @@ void TaskFemConstraintFluidBoundary::updateUI() } } -bool TaskFemConstraintFluidBoundary::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintFluidBoundary::changeEvent(QEvent* e) { TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.h b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.h index 3dc484dac8..1441ffc198 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.h @@ -91,7 +91,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp b/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp index fafe7e5fa2..fbc2080e69 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp @@ -386,11 +386,6 @@ bool TaskFemConstraintForce::getReverse() const TaskFemConstraintForce::~TaskFemConstraintForce() = default; -bool TaskFemConstraintForce::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintForce::changeEvent(QEvent* e) { TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintForce.h b/src/Mod/Fem/Gui/TaskFemConstraintForce.h index f166e75c53..443fb54aed 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintForce.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintForce.h @@ -69,7 +69,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp index df5b2cca8b..3631795cbb 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp @@ -458,11 +458,6 @@ std::string TaskFemConstraintHeatflux::get_constraint_type() const return type; } -bool TaskFemConstraintHeatflux::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintHeatflux::changeEvent(QEvent* e) { TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h index 50bf357deb..5930d967bc 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h @@ -66,7 +66,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.cpp b/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.cpp index b260d91144..0758309941 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.cpp @@ -281,11 +281,6 @@ const std::string TaskFemConstraintPlaneRotation::getReferences() const return TaskFemConstraint::getReferences(items); } -bool TaskFemConstraintPlaneRotation::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintPlaneRotation::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.h b/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.h index ee1092ce32..6c476fd614 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintPlaneRotation.h @@ -53,7 +53,6 @@ private Q_SLOTS: void removeFromSelection(); protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; private: diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp index acb0487626..9a5008e90a 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp @@ -262,11 +262,6 @@ bool TaskFemConstraintPressure::getReverse() const return ui->checkBoxReverse->isChecked(); } -bool TaskFemConstraintPressure::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintPressure::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.h b/src/Mod/Fem/Gui/TaskFemConstraintPressure.h index a9a35ba8c4..b68e593c78 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.h @@ -56,7 +56,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.cpp b/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.cpp index ff3d255c8c..0ec94a6bd1 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.cpp @@ -619,11 +619,6 @@ std::vector TaskFemConstraintRigidBody::getRotationalMode() const return rotModes; } -bool TaskFemConstraintRigidBody::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintRigidBody::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.h b/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.h index 1ce5745c52..f178422cdd 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintRigidBody.h @@ -66,7 +66,6 @@ private Q_SLOTS: void onRefNodeZChanged(double); protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintSpring.cpp b/src/Mod/Fem/Gui/TaskFemConstraintSpring.cpp index 638a7e4e35..cdc53f827a 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintSpring.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintSpring.cpp @@ -270,11 +270,6 @@ std::string TaskFemConstraintSpring::getElmerStiffness() const return Base::Tools::toStdString(ui->ElmerStiffnessCB->currentText()); } -bool TaskFemConstraintSpring::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintSpring::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintSpring.h b/src/Mod/Fem/Gui/TaskFemConstraintSpring.h index c4fed681b6..589deb7af8 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintSpring.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintSpring.h @@ -54,7 +54,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintTemperature.cpp b/src/Mod/Fem/Gui/TaskFemConstraintTemperature.cpp index 5ebcb4ecbb..0a76f0e8f9 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintTemperature.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintTemperature.cpp @@ -319,11 +319,6 @@ std::string TaskFemConstraintTemperature::get_constraint_type() const return ui->cb_constr_type->currentText().toStdString(); } -bool TaskFemConstraintTemperature::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintTemperature::changeEvent(QEvent*) { // TaskBox::changeEvent(e); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintTemperature.h b/src/Mod/Fem/Gui/TaskFemConstraintTemperature.h index 2ff5e6df2c..8b424af4ee 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintTemperature.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintTemperature.h @@ -62,7 +62,6 @@ private Q_SLOTS: void removeFromSelection() override; protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; void clearButtons(const SelectionChangeModes notThis) override; diff --git a/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp b/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp index d7dd055f28..b7c815bd08 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp @@ -555,11 +555,6 @@ std::string TaskFemConstraintTransform::get_transform_type() const return transform; } -bool TaskFemConstraintTransform::event(QEvent* e) -{ - return TaskFemConstraint::KeyEvent(e); -} - void TaskFemConstraintTransform::changeEvent(QEvent*) {} diff --git a/src/Mod/Fem/Gui/TaskFemConstraintTransform.h b/src/Mod/Fem/Gui/TaskFemConstraintTransform.h index 4219e3313e..8e05f30b47 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintTransform.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintTransform.h @@ -63,7 +63,6 @@ private Q_SLOTS: void angleChanged(double a); protected: - bool event(QEvent* e) override; void changeEvent(QEvent* e) override; const QString makeText(const App::DocumentObject* obj) const;