From da4f584a5085d64fc8a162c7bb900de46d9c144c Mon Sep 17 00:00:00 2001 From: Alfredo Monclus Date: Sun, 9 Feb 2025 15:57:14 -0300 Subject: [PATCH] PD(hole taskpanel): apply review suggestions * refactor: change to ternary op * refactor: apply recommendations to widgets * refactor: use QSignalBlocker * refactor: address some compiler complaints * refactor: add namespace Gui to new widgets --- src/Gui/ElideCheckBox.cpp | 58 ++-- src/Gui/ElideCheckBox.h | 47 ++-- src/Gui/ElideLabel.cpp | 68 +++-- src/Gui/ElideLabel.h | 47 ++-- src/Gui/FontScaledSVG.cpp | 50 ++-- src/Gui/FontScaledSVG.h | 48 ++-- src/Mod/PartDesign/Gui/TaskHoleParameters.cpp | 252 +++++------------- src/Mod/PartDesign/Gui/TaskHoleParameters.ui | 46 ++-- 8 files changed, 271 insertions(+), 345 deletions(-) diff --git a/src/Gui/ElideCheckBox.cpp b/src/Gui/ElideCheckBox.cpp index 33169dbe4a..8ca88b0d2e 100644 --- a/src/Gui/ElideCheckBox.cpp +++ b/src/Gui/ElideCheckBox.cpp @@ -1,30 +1,35 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget adds the missing ellipsize functionality in QT5 +#include "PreCompiled.h" + #include "ElideCheckBox.h" -const int CheckboxSpacing = 25; +namespace Gui { + +const int CheckboxSpacing = 18; ElideCheckBox::ElideCheckBox(QWidget *parent) : QCheckBox(parent) { @@ -41,9 +46,9 @@ void ElideCheckBox::paintEvent(QPaintEvent *event) { style()->drawControl(QStyle::CE_CheckBox, &option, &painter, this); QRect textRect = option.rect; - int padding = 4; - textRect.setX(textRect.x() + 25); + textRect.setX(textRect.x() + CheckboxSpacing); + constexpr int padding = 4; QFontMetrics fm(font()); QString elidedText = fm.elidedText(text(), Qt::ElideRight, textRect.width() - padding); @@ -55,7 +60,7 @@ QSize ElideCheckBox::sizeHint() const { QFontMetrics fm(font()); int width = fm.horizontalAdvance(this->text()) + CheckboxSpacing; int height = fm.height(); - return QSize(width, height); + return {width, height}; } QSize ElideCheckBox::minimumSizeHint() const { @@ -63,6 +68,9 @@ QSize ElideCheckBox::minimumSizeHint() const { QString minimumText = QStringLiteral("A..."); int width = fm.horizontalAdvance(minimumText) + CheckboxSpacing; int height = fm.height(); - return QSize(width, height); + return {width, height}; } +} // namespace Gui + +#include "moc_ElideCheckBox.cpp" // NOLINT diff --git a/src/Gui/ElideCheckBox.h b/src/Gui/ElideCheckBox.h index 7d83d4d1c0..ce93133b53 100644 --- a/src/Gui/ElideCheckBox.h +++ b/src/Gui/ElideCheckBox.h @@ -1,23 +1,24 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget adds the missing ellipsize functionality in QT5 @@ -25,7 +26,6 @@ #ifndef ELIDECHECKBOX_H #define ELIDECHECKBOX_H -#include "PreCompiled.h" #ifndef _PreComp_ #include #include @@ -33,6 +33,9 @@ #include #endif +#include + +namespace Gui { class GuiExport ElideCheckBox : public QCheckBox { Q_OBJECT @@ -47,5 +50,7 @@ protected: QSize minimumSizeHint() const override; }; +} // namespace Gui + #endif // ELIDECHECKBOX_H diff --git a/src/Gui/ElideLabel.cpp b/src/Gui/ElideLabel.cpp index 5576db31ae..10d7294522 100644 --- a/src/Gui/ElideLabel.cpp +++ b/src/Gui/ElideLabel.cpp @@ -1,29 +1,34 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget adds the missing ellipsize functionality in QT5 +#include "PreCompiled.h" + #include "ElideLabel.h" +namespace Gui { + ElideLabel::ElideLabel(QWidget *parent) : QLabel(parent) { } @@ -34,20 +39,25 @@ void ElideLabel::paintEvent(QPaintEvent *event) { painter.setPen(palette().color(QPalette::WindowText)); painter.setFont(font()); - QFontMetrics fm(font()); - QString text = this->text(); - int availableWidth = width() - 4; // Account for padding + constexpr int padding = 4; + QFontMetrics fm(painter.fontMetrics()); - QString elidedText = fm.elidedText(text, Qt::ElideRight, availableWidth); + int availableWidth = width() - padding * 2; + if (availableWidth < 0) { + return; + } - painter.drawText(2, 2, availableWidth, height(), Qt::AlignLeft | Qt::AlignVCenter, elidedText); + QString elidedText = fm.elidedText(text(), Qt::ElideRight, availableWidth); + + QRect textRect = rect().adjusted(padding, 0, -padding, 0); + painter.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, elidedText); } QSize ElideLabel::sizeHint() const { QFontMetrics fm(font()); int width = fm.horizontalAdvance(this->text()); int height = fm.height(); - return QSize(width, height); + return {width, height}; } QSize ElideLabel::minimumSizeHint() const { @@ -55,5 +65,9 @@ QSize ElideLabel::minimumSizeHint() const { QString minimumText = QStringLiteral("A..."); int width = fm.horizontalAdvance(minimumText); int height = fm.height(); - return QSize(width, height); + return {width, height}; } + +} // namespace Gui + +#include "moc_ElideLabel.cpp" // NOLINT diff --git a/src/Gui/ElideLabel.h b/src/Gui/ElideLabel.h index 1afa460f90..7191d52f57 100644 --- a/src/Gui/ElideLabel.h +++ b/src/Gui/ElideLabel.h @@ -1,23 +1,24 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget adds the missing ellipsize functionality in QT5 @@ -25,13 +26,15 @@ #ifndef ELIDELABEL_H #define ELIDELABEL_H -#include "PreCompiled.h" #ifndef _PreComp_ #include #include #include #endif +#include + +namespace Gui { class GuiExport ElideLabel : public QLabel { Q_OBJECT @@ -46,4 +49,6 @@ protected: QSize minimumSizeHint() const override; }; +} // namespace Gui + #endif // ELIDELABEL_H diff --git a/src/Gui/FontScaledSVG.cpp b/src/Gui/FontScaledSVG.cpp index 9fa10c948e..89c02e3b21 100644 --- a/src/Gui/FontScaledSVG.cpp +++ b/src/Gui/FontScaledSVG.cpp @@ -1,29 +1,34 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget scales an svg according to fonts +#include "PreCompiled.h" + #include "FontScaledSVG.h" +namespace Gui { + FontScaledSVG::FontScaledSVG(QWidget *parent) : QWidget(parent), m_svgRenderer(new QSvgRenderer(this)) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); @@ -56,10 +61,13 @@ void FontScaledSVG::updateScaledSize() { QFontMetrics metrics(font()); qreal spacing = metrics.lineSpacing(); - int baseFactor = 18; + constexpr int baseFactor = 18; qreal scalingFactor = spacing / baseFactor; QSize targetSize = baseSize * scalingFactor; setFixedSize(targetSize); } +} // namespace Gui + +#include "moc_FontScaledSVG.cpp" // NOLINT diff --git a/src/Gui/FontScaledSVG.h b/src/Gui/FontScaledSVG.h index 04f4f0ba05..ffdc3e666b 100644 --- a/src/Gui/FontScaledSVG.h +++ b/src/Gui/FontScaledSVG.h @@ -1,23 +1,24 @@ -/*************************************************************************** - * Copyright (c) 2025 Alfredo Monclus * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 51 Franklin Street, * - * Fifth Floor, Boston, MA 02110-1301, USA * - * * +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Alfredo Monclus * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD 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. * + * * + * FreeCAD 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 FreeCAD. If not, see * + * . * + * * ***************************************************************************/ // This custom widget scales an svg according to fonts @@ -25,7 +26,6 @@ #ifndef FONTSCALEDSVG_H #define FONTSCALEDSVG_H -#include "PreCompiled.h" #ifndef _PreComp_ #include #include @@ -33,6 +33,10 @@ #include #endif +#include + +namespace Gui { + class GuiExport FontScaledSVG : public QWidget { Q_OBJECT @@ -50,4 +54,6 @@ private: void updateScaledSize(); }; +} // namespace Gui + #endif // FONTSCALEDSVG_H diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp index fc0640266b..2ebbeed7b4 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp @@ -68,8 +68,8 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare ui->ThreadType->addItem(tr("UTS extra fine"), QByteArray("UTS")); ui->ThreadType->addItem(tr("ANSI pipes"), QByteArray("None")); ui->ThreadType->addItem(tr("ISO/BSP pipes"), QByteArray("None")); - ui->ThreadType->addItem(tr("BSW whitworth"), QByteArray("BS")); - ui->ThreadType->addItem(tr("BSF whitworth fine"), QByteArray("BS")); + ui->ThreadType->addItem(tr("BSW whitworth"), QByteArray("None")); + ui->ThreadType->addItem(tr("BSF whitworth fine"), QByteArray("None")); // read values from the hole properties auto pcHole = getObject(); @@ -465,9 +465,7 @@ void TaskHoleParameters::setCutDiagram() baseFileName += "_flat"; } - ui->cutDiagram->setSvg( - QString::fromUtf8((":images/" + baseFileName + ".svg").c_str()) - ); + ui->cutDiagram->setSvg(QString::fromUtf8((":images/" + baseFileName + ".svg").c_str())); } void TaskHoleParameters::holeCutCustomValuesChanged() @@ -794,259 +792,145 @@ void TaskHoleParameters::changedObject(const App::Document&, const App::Property { auto hole = getObject(); if (!hole) { - // happens when aborting the command - return; + return; // happens when aborting the command } bool ro = Prop.isReadOnly(); Base::Console().Log("Parameter %s was updated\n", Prop.getName()); + auto updateCheckable = [&](QCheckBox* widget, bool value) { + [[maybe_unused]] QSignalBlocker blocker(widget); + widget->setChecked(value); + widget->setDisabled(ro); + }; + + auto updateRadio = [&](QRadioButton* widget, bool value) { + [[maybe_unused]] QSignalBlocker blocker(widget); + widget->setChecked(value); + widget->setDisabled(ro); + }; + + auto updateComboBox = [&](QComboBox* widget, int value) { + [[maybe_unused]] QSignalBlocker blocker(widget); + widget->setCurrentIndex(value); + widget->setDisabled(ro); + }; + + auto updateSpinBox = [&](Gui::PrefQuantitySpinBox* widget, double value) { + [[maybe_unused]] QSignalBlocker blocker(widget); + widget->setValue(value); + widget->setDisabled(ro); + }; + if (&Prop == &hole->Threaded) { ui->Threaded->setEnabled(true); - if (ui->Threaded->isChecked() ^ hole->Threaded.getValue()) { - ui->Threaded->blockSignals(true); - ui->Threaded->setChecked(hole->Threaded.getValue()); - ui->Threaded->blockSignals(false); - } - ui->Threaded->setDisabled(ro); + updateCheckable(ui->Threaded, hole->Threaded.getValue()); } else if (&Prop == &hole->ThreadType) { ui->ThreadType->setEnabled(true); + updateComboBox(ui->ThreadType, hole->ThreadType.getValue()); - ui->ThreadSize->blockSignals(true); - ui->ThreadSize->clear(); - std::vector cursor = hole->ThreadSize.getEnumVector(); - for (const auto& it : cursor) { - ui->ThreadSize->addItem(QString::fromStdString(it)); - } - ui->ThreadSize->setCurrentIndex(hole->ThreadSize.getValue()); - ui->ThreadSize->blockSignals(false); + // Thread type also updates related properties + auto updateComboBoxItems = [&](QComboBox* widget, const auto& values, int selected) { + QSignalBlocker blocker(widget); + widget->clear(); + for (const auto& it : values) { + widget->addItem(QString::fromStdString(it)); + } + widget->setCurrentIndex(selected); + }; - // Thread type also updates HoleCutType and ThreadClass - ui->HoleCutType->blockSignals(true); - ui->HoleCutType->clear(); - cursor = hole->HoleCutType.getEnumVector(); - for (const auto& it : cursor) { - ui->HoleCutType->addItem(QString::fromStdString(it)); - } - ui->HoleCutType->setCurrentIndex(hole->HoleCutType.getValue()); - ui->HoleCutType->blockSignals(false); - - ui->ThreadClass->blockSignals(true); - ui->ThreadClass->clear(); - cursor = hole->ThreadClass.getEnumVector(); - for (const auto& it : cursor) { - ui->ThreadClass->addItem(QString::fromStdString(it)); - } - ui->ThreadClass->setCurrentIndex(hole->ThreadClass.getValue()); - ui->ThreadClass->blockSignals(false); - - if (ui->ThreadType->currentIndex() != hole->ThreadType.getValue()) { - ui->ThreadType->blockSignals(true); - ui->ThreadType->setCurrentIndex(hole->ThreadType.getValue()); - ui->ThreadType->blockSignals(false); - } - ui->ThreadType->setDisabled(ro); + updateComboBoxItems(ui->ThreadSize, hole->ThreadSize.getEnumVector(), hole->ThreadSize.getValue()); + updateComboBoxItems(ui->HoleCutType, hole->HoleCutType.getEnumVector(), hole->HoleCutType.getValue()); + updateComboBoxItems(ui->ThreadClass, hole->ThreadClass.getEnumVector(), hole->ThreadClass.getValue()); } else if (&Prop == &hole->ThreadSize) { ui->ThreadSize->setEnabled(true); - if (ui->ThreadSize->currentIndex() != hole->ThreadSize.getValue()) { - ui->ThreadSize->blockSignals(true); - ui->ThreadSize->setCurrentIndex(hole->ThreadSize.getValue()); - ui->ThreadSize->blockSignals(false); - } - ui->ThreadSize->setDisabled(ro); + updateComboBox(ui->ThreadSize, hole->ThreadSize.getValue()); } else if (&Prop == &hole->ThreadClass) { ui->ThreadClass->setEnabled(true); - if (ui->ThreadClass->currentIndex() != hole->ThreadClass.getValue()) { - ui->ThreadClass->blockSignals(true); - ui->ThreadClass->setCurrentIndex(hole->ThreadClass.getValue()); - ui->ThreadClass->blockSignals(false); - } - ui->ThreadClass->setDisabled(ro); + updateComboBox(ui->ThreadClass, hole->ThreadClass.getValue()); } else if (&Prop == &hole->ThreadFit) { ui->ThreadFit->setEnabled(true); - if (ui->ThreadFit->currentIndex() != hole->ThreadFit.getValue()) { - ui->ThreadFit->blockSignals(true); - ui->ThreadFit->setCurrentIndex(hole->ThreadFit.getValue()); - ui->ThreadFit->blockSignals(false); - } - ui->ThreadFit->setDisabled(ro); + updateComboBox(ui->ThreadFit, hole->ThreadFit.getValue()); } else if (&Prop == &hole->Diameter) { ui->Diameter->setEnabled(true); - if (ui->Diameter->value().getValue() != hole->Diameter.getValue()) { - ui->Diameter->blockSignals(true); - ui->Diameter->setValue(hole->Diameter.getValue()); - ui->Diameter->blockSignals(false); - } - ui->Diameter->setDisabled(ro); + updateSpinBox(ui->Diameter, hole->Diameter.getValue()); } else if (&Prop == &hole->ThreadDirection) { ui->directionRightHand->setEnabled(true); ui->directionLeftHand->setEnabled(true); + std::string direction(hole->ThreadDirection.getValueAsString()); - if (direction == "Right" && !ui->directionRightHand->isChecked()) { - ui->directionRightHand->blockSignals(true); - ui->directionRightHand->setChecked(true); - ui->directionRightHand->blockSignals(false); - } - if (direction == "Left" && !ui->directionLeftHand->isChecked()) { - ui->directionLeftHand->blockSignals(true); - ui->directionLeftHand->setChecked(true); - ui->directionLeftHand->blockSignals(false); - } - ui->directionRightHand->setDisabled(ro); - ui->directionLeftHand->setDisabled(ro); + updateRadio(ui->directionRightHand, direction == "Right"); + updateRadio(ui->directionLeftHand, direction == "Left"); } else if (&Prop == &hole->HoleCutType) { ui->HoleCutType->setEnabled(true); - if (ui->HoleCutType->currentIndex() != hole->HoleCutType.getValue()) { - ui->HoleCutType->blockSignals(true); - ui->HoleCutType->setCurrentIndex(hole->HoleCutType.getValue()); - ui->HoleCutType->blockSignals(false); - } - ui->HoleCutType->setDisabled(ro); + updateComboBox(ui->HoleCutType, hole->HoleCutType.getValue()); } else if (&Prop == &hole->HoleCutDiameter) { ui->HoleCutDiameter->setEnabled(true); - if (ui->HoleCutDiameter->value().getValue() != hole->HoleCutDiameter.getValue()) { - ui->HoleCutDiameter->blockSignals(true); - ui->HoleCutDiameter->setValue(hole->HoleCutDiameter.getValue()); - ui->HoleCutDiameter->blockSignals(false); - } - ui->HoleCutDiameter->setDisabled(ro); + updateSpinBox(ui->HoleCutDiameter, hole->HoleCutDiameter.getValue()); } else if (&Prop == &hole->HoleCutDepth) { ui->HoleCutDepth->setEnabled(true); - if (ui->HoleCutDepth->value().getValue() != hole->HoleCutDepth.getValue()) { - ui->HoleCutDepth->blockSignals(true); - ui->HoleCutDepth->setValue(hole->HoleCutDepth.getValue()); - ui->HoleCutDepth->blockSignals(false); - } - ui->HoleCutDepth->setDisabled(ro); + updateSpinBox(ui->HoleCutDepth, hole->HoleCutDepth.getValue()); } else if (&Prop == &hole->HoleCutCountersinkAngle) { ui->HoleCutCountersinkAngle->setEnabled(true); - if (ui->HoleCutCountersinkAngle->value().getValue() - != hole->HoleCutCountersinkAngle.getValue()) { - ui->HoleCutCountersinkAngle->blockSignals(true); - ui->HoleCutCountersinkAngle->setValue(hole->HoleCutCountersinkAngle.getValue()); - ui->HoleCutCountersinkAngle->blockSignals(false); - } - ui->HoleCutCountersinkAngle->setDisabled(ro); + updateSpinBox(ui->HoleCutCountersinkAngle, hole->HoleCutCountersinkAngle.getValue()); } else if (&Prop == &hole->DepthType) { ui->DepthType->setEnabled(true); - if (ui->DepthType->currentIndex() != hole->DepthType.getValue()) { - ui->DepthType->blockSignals(true); - ui->DepthType->setCurrentIndex(hole->DepthType.getValue()); - ui->DepthType->blockSignals(false); - } - ui->DepthType->setDisabled(ro); + updateComboBox(ui->DepthType, hole->DepthType.getValue()); } else if (&Prop == &hole->Depth) { ui->Depth->setEnabled(true); - if (ui->Depth->value().getValue() != hole->Depth.getValue()) { - ui->Depth->blockSignals(true); - ui->Depth->setValue(hole->Depth.getValue()); - ui->Depth->blockSignals(false); - } - ui->Depth->setDisabled(ro); + updateSpinBox(ui->Depth, hole->Depth.getValue()); } else if (&Prop == &hole->DrillPoint) { - std::string drillPoint(hole->DrillPoint.getValueAsString()); ui->DrillPointAngled->setEnabled(true); - if (ui->DrillPointAngled->isChecked() ^ (drillPoint == "Angled")) { - ui->DrillPointAngled->blockSignals(true); - ui->DrillPointAngled->setChecked(drillPoint == "Angled"); - ui->DrillPointAngled->blockSignals(false); - } - ui->DrillPointAngled->setDisabled(ro); + updateCheckable(ui->DrillPointAngled, hole->DrillPoint.getValueAsString() == std::string("Angled")); } else if (&Prop == &hole->DrillPointAngle) { ui->DrillPointAngle->setEnabled(true); - if (ui->DrillPointAngle->value().getValue() != hole->DrillPointAngle.getValue()) { - ui->DrillPointAngle->blockSignals(true); - ui->DrillPointAngle->setValue(hole->DrillPointAngle.getValue()); - ui->DrillPointAngle->blockSignals(false); - } - ui->DrillPointAngle->setDisabled(ro); + updateSpinBox(ui->DrillPointAngle, hole->DrillPointAngle.getValue()); } else if (&Prop == &hole->DrillForDepth) { ui->DrillForDepth->setEnabled(true); - if (ui->DrillForDepth->isChecked() ^ hole->DrillForDepth.getValue()) { - ui->DrillForDepth->blockSignals(true); - ui->DrillForDepth->setChecked(hole->DrillForDepth.getValue()); - ui->DrillForDepth->blockSignals(false); - } - ui->DrillForDepth->setDisabled(ro); + updateCheckable(ui->DrillForDepth, hole->DrillForDepth.getValue()); } else if (&Prop == &hole->Tapered) { ui->Tapered->setEnabled(true); - if (ui->Tapered->isChecked() ^ hole->Tapered.getValue()) { - ui->Tapered->blockSignals(true); - ui->Tapered->setChecked(hole->Tapered.getValue()); - ui->Tapered->blockSignals(false); - } - ui->Tapered->setDisabled(ro); + updateCheckable(ui->Tapered, hole->Tapered.getValue()); } else if (&Prop == &hole->TaperedAngle) { ui->TaperedAngle->setEnabled(true); - if (ui->TaperedAngle->value().getValue() != hole->TaperedAngle.getValue()) { - ui->TaperedAngle->blockSignals(true); - ui->TaperedAngle->setValue(hole->TaperedAngle.getValue()); - ui->TaperedAngle->blockSignals(false); - } - ui->TaperedAngle->setDisabled(ro); + updateSpinBox(ui->TaperedAngle, hole->TaperedAngle.getValue()); } else if (&Prop == &hole->ModelThread) { ui->ModelThread->setEnabled(true); - if (ui->ModelThread->isChecked() ^ hole->ModelThread.getValue()) { - ui->ModelThread->blockSignals(true); - ui->ModelThread->setChecked(hole->ModelThread.getValue()); - ui->ModelThread->blockSignals(false); - } - ui->ModelThread->setDisabled(ro); + updateCheckable(ui->ModelThread, hole->ModelThread.getValue()); } else if (&Prop == &hole->UseCustomThreadClearance) { ui->UseCustomThreadClearance->setEnabled(true); - if (ui->UseCustomThreadClearance->isChecked() ^ hole->UseCustomThreadClearance.getValue()) { - ui->UseCustomThreadClearance->blockSignals(true); - ui->UseCustomThreadClearance->setChecked(hole->UseCustomThreadClearance.getValue()); - ui->UseCustomThreadClearance->blockSignals(false); - } - ui->UseCustomThreadClearance->setDisabled(ro); + updateCheckable(ui->UseCustomThreadClearance, hole->UseCustomThreadClearance.getValue()); } else if (&Prop == &hole->CustomThreadClearance) { ui->CustomThreadClearance->setEnabled(true); - if (ui->CustomThreadClearance->value().getValue() - != hole->CustomThreadClearance.getValue()) { - ui->CustomThreadClearance->blockSignals(true); - ui->CustomThreadClearance->setValue(hole->CustomThreadClearance.getValue()); - ui->CustomThreadClearance->blockSignals(false); - } - ui->CustomThreadClearance->setDisabled(ro); + updateSpinBox(ui->CustomThreadClearance, hole->CustomThreadClearance.getValue()); } else if (&Prop == &hole->ThreadDepthType) { ui->ThreadDepthType->setEnabled(true); - if (ui->ThreadDepthType->currentIndex() != hole->ThreadDepthType.getValue()) { - ui->ThreadDepthType->blockSignals(true); - ui->ThreadDepthType->setCurrentIndex(hole->ThreadDepthType.getValue()); - ui->ThreadDepthType->blockSignals(false); - } - ui->ThreadDepthType->setDisabled(ro); + updateComboBox(ui->ThreadDepthType, hole->ThreadDepthType.getValue()); } else if (&Prop == &hole->ThreadDepth) { ui->ThreadDepth->setEnabled(true); - if (ui->ThreadDepth->value().getValue() != hole->ThreadDepth.getValue()) { - ui->ThreadDepth->blockSignals(true); - ui->ThreadDepth->setValue(hole->ThreadDepth.getValue()); - ui->ThreadDepth->blockSignals(false); - } - ui->ThreadDepth->setDisabled(ro); + updateSpinBox(ui->ThreadDepth, hole->ThreadDepth.getValue()); } } @@ -1149,11 +1033,7 @@ Base::Quantity TaskHoleParameters::getDepth() const long TaskHoleParameters::getDrillPoint() const { - - if (ui->DrillPointAngled->isChecked()) { - return 1; - } - return 0; + return ui->DrillPointAngled->isChecked() ? 1 : 0; } Base::Quantity TaskHoleParameters::getDrillPointAngle() const diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui index b3eb1e2c68..ee923ddf3a 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui @@ -38,7 +38,7 @@ 10 - + 0 @@ -77,7 +77,7 @@ - + 0 @@ -108,7 +108,7 @@ - + 0 @@ -156,7 +156,7 @@ - + 0 @@ -198,7 +198,7 @@ - + 0 @@ -266,7 +266,7 @@ the screw's top below the surface 0 - + 0 @@ -298,7 +298,7 @@ the screw's top below the surface - + 0 @@ -320,7 +320,7 @@ account for the depth of blind holes - + 0 @@ -355,7 +355,7 @@ account for the depth of blind holes - + 0 @@ -394,7 +394,7 @@ account for the depth of blind holes - + 0 @@ -430,7 +430,7 @@ account for the depth of blind holes - + 0 @@ -485,7 +485,7 @@ account for the depth of blind holes 0 - + 0 @@ -561,7 +561,7 @@ over 90: larger hole radius at the bottom - + 0 @@ -584,7 +584,7 @@ over 90: larger hole radius at the bottom - + 0 @@ -636,7 +636,7 @@ over 90: larger hole radius at the bottom 0 - + 0 @@ -732,7 +732,7 @@ Only available for holes without thread - + 0 @@ -820,7 +820,7 @@ Only available for holes without thread 0 - + 0 @@ -836,7 +836,7 @@ Only available for holes without thread - + true @@ -887,7 +887,7 @@ Note that the calculation can take some time 0 - + 0 @@ -989,7 +989,7 @@ Note that the calculation can take some time 0 - + 0 @@ -1049,17 +1049,17 @@ Note that the calculation can take some time
Gui/PrefWidgets.h
- ElideLabel + Gui::ElideLabel QLabel
Gui/ElideLabel.h
- ElideCheckBox + Gui::ElideCheckBox QCheckBox
Gui/ElideCheckBox.h
- FontScaledSVG + Gui::FontScaledSVG QWidget
Gui/FontScaledSVG.h
1