Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Respect configured workspace length unit in editors #684

Merged
merged 13 commits into from Apr 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Expand Up @@ -37,3 +37,6 @@
[submodule "i18n"]
path = i18n
url = https://github.com/LibrePCB/librepcb-i18n.git
[submodule "libs/muparser"]
path = libs/muparser
url = https://github.com/LibrePCB/muparser.git
3 changes: 3 additions & 0 deletions apps/librepcb-cli/librepcb-cli.pro
Expand Up @@ -32,6 +32,7 @@ LIBS += \
-llibrepcbcommon \
-lsexpresso \
-lclipper \
-lmuparser \
-lquazip -lz

INCLUDEPATH += \
Expand All @@ -52,6 +53,7 @@ DEPENDPATH += \
../../libs/quazip \
../../libs/sexpresso \
../../libs/clipper \
../../libs/muparser \

PRE_TARGETDEPS += \
$${DESTDIR}/libhoedown.a \
Expand All @@ -65,6 +67,7 @@ PRE_TARGETDEPS += \
$${DESTDIR}/libquazip.a \
$${DESTDIR}/libsexpresso.a \
$${DESTDIR}/libclipper.a \
$${DESTDIR}/libmuparser.a \

RESOURCES += \
../../img/images.qrc \
Expand Down
3 changes: 3 additions & 0 deletions apps/librepcb/librepcb.pro
Expand Up @@ -46,6 +46,7 @@ LIBS += \
-llibrepcbcommon \
-lsexpresso \
-lclipper \
-lmuparser \
-lquazip -lz

INCLUDEPATH += \
Expand All @@ -66,6 +67,7 @@ DEPENDPATH += \
../../libs/quazip \
../../libs/sexpresso \
../../libs/clipper \
../../libs/muparser \

PRE_TARGETDEPS += \
$${DESTDIR}/libhoedown.a \
Expand All @@ -79,6 +81,7 @@ PRE_TARGETDEPS += \
$${DESTDIR}/libquazip.a \
$${DESTDIR}/libsexpresso.a \
$${DESTDIR}/libclipper.a \
$${DESTDIR}/libmuparser.a \

RESOURCES += \
../../img/images.qrc \
Expand Down
5 changes: 5 additions & 0 deletions libs/librepcb/common/common.pro
Expand Up @@ -26,6 +26,7 @@ INCLUDEPATH += \
../../sexpresso \
../../type_safe/include \
../../type_safe/external/debug_assert \
../../muparser/include \

RESOURCES += \
../../../img/images.qrc \
Expand Down Expand Up @@ -131,6 +132,7 @@ SOURCES += \
utils/clipperhelpers.cpp \
utils/exclusiveactiongroup.cpp \
utils/graphicslayerstackappearancesettings.cpp \
utils/mathparser.cpp \
utils/toolbarproxy.cpp \
utils/undostackactiongroup.cpp \
uuid.cpp \
Expand All @@ -146,6 +148,7 @@ SOURCES += \
widgets/graphicslayercombobox.cpp \
widgets/halignactiongroup.cpp \
widgets/lengthedit.cpp \
widgets/lengtheditbase.cpp \
widgets/numbereditbase.cpp \
widgets/patheditorwidget.cpp \
widgets/plaintextedit.cpp \
Expand Down Expand Up @@ -277,6 +280,7 @@ HEADERS += \
utils/clipperhelpers.h \
utils/exclusiveactiongroup.h \
utils/graphicslayerstackappearancesettings.h \
utils/mathparser.h \
utils/toolbarproxy.h \
utils/undostackactiongroup.h \
uuid.h \
Expand All @@ -292,6 +296,7 @@ HEADERS += \
widgets/graphicslayercombobox.h \
widgets/halignactiongroup.h \
widgets/lengthedit.h \
widgets/lengtheditbase.h \
widgets/numbereditbase.h \
widgets/patheditorwidget.h \
widgets/plaintextedit.h \
Expand Down
42 changes: 31 additions & 11 deletions libs/librepcb/common/dialogs/boarddesignrulesdialog.cpp
Expand Up @@ -36,22 +36,42 @@ namespace librepcb {
******************************************************************************/

BoardDesignRulesDialog::BoardDesignRulesDialog(const BoardDesignRules& rules,
QWidget* parent)
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent)
: QDialog(parent), mUi(new Ui::BoardDesignRulesDialog), mDesignRules(rules) {
mUi->setupUi(this);
mUi->edtStopMaskClrRatio->setSingleStep(5.0); // [%]
mUi->edtStopMaskClrMin->setSingleStep(0.1); // [mm]
mUi->edtStopMaskClrMax->setSingleStep(0.1); // [mm]
mUi->edtStopMaskMaxViaDia->setSingleStep(0.1); // [mm]
mUi->edtStopMaskClrRatio->setSingleStep(5.0); // [%]
mUi->edtStopMaskClrMin->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/stopmask_clearance_min");
mUi->edtStopMaskClrMax->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/stopmask_clearance_max");
mUi->edtStopMaskMaxViaDia->configure(
lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/stopmask_max_via_diameter");
mUi->edtCreamMaskClrRatio->setSingleStep(5.0); // [%]
mUi->edtCreamMaskClrMin->setSingleStep(0.1); // [mm]
mUi->edtCreamMaskClrMax->setSingleStep(0.1); // [mm]
mUi->edtCreamMaskClrMin->configure(
lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/creammask_clearance_min");
mUi->edtCreamMaskClrMax->configure(
lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/creammask_clearance_max");
mUi->edtRestringPadsRatio->setSingleStep(5.0); // [%]
mUi->edtRestringPadsMin->setSingleStep(0.1); // [mm]
mUi->edtRestringPadsMax->setSingleStep(0.1); // [mm]
mUi->edtRestringPadsMin->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/restring_pads_min");
mUi->edtRestringPadsMax->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/restring_pads_max");
mUi->edtRestringViasRatio->setSingleStep(5.0); // [%]
mUi->edtRestringViasMin->setSingleStep(0.1); // [mm]
mUi->edtRestringViasMax->setSingleStep(0.1); // [mm]
mUi->edtRestringViasMin->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/restring_vias_min");
mUi->edtRestringViasMax->configure(lengthUnit,
LengthEditBase::Steps::generic(),
settingsPrefix % "/restring_vias_max");

updateWidgets();
}
Expand Down
5 changes: 3 additions & 2 deletions libs/librepcb/common/dialogs/boarddesignrulesdialog.h
Expand Up @@ -51,8 +51,9 @@ class BoardDesignRulesDialog final : public QDialog {
// Constructors / Destructor
BoardDesignRulesDialog() = delete;
BoardDesignRulesDialog(const BoardDesignRulesDialog& other) = delete;
explicit BoardDesignRulesDialog(const BoardDesignRules& rules,
QWidget* parent = 0);
BoardDesignRulesDialog(const BoardDesignRules& rules,
const LengthUnit& lengthUnit,
const QString& settingsPrefix, QWidget* parent = 0);
~BoardDesignRulesDialog();

// Getters
Expand Down
14 changes: 11 additions & 3 deletions libs/librepcb/common/dialogs/circlepropertiesdialog.cpp
Expand Up @@ -39,14 +39,22 @@ namespace librepcb {
CirclePropertiesDialog::CirclePropertiesDialog(Circle& circle,
UndoStack& undoStack,
QList<GraphicsLayer*> layers,
QWidget* parent) noexcept
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent) noexcept
: QDialog(parent),
mCircle(circle),
mUndoStack(undoStack),
mUi(new Ui::CirclePropertiesDialog) {
mUi->setupUi(this);
mUi->edtLineWidth->setSingleStep(0.1); // [mm]
mUi->edtDiameter->setSingleStep(0.1); // [mm]
mUi->edtLineWidth->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/line_width");
mUi->edtDiameter->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/diameter");
mUi->edtPosX->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_x");
mUi->edtPosY->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_y");

foreach (const GraphicsLayer* layer, layers) {
mUi->cbxLayer->addItem(layer->getNameTr(), layer->getName());
Expand Down
3 changes: 3 additions & 0 deletions libs/librepcb/common/dialogs/circlepropertiesdialog.h
Expand Up @@ -34,6 +34,7 @@ namespace librepcb {
class UndoStack;
class Circle;
class GraphicsLayer;
class LengthUnit;

namespace Ui {
class CirclePropertiesDialog;
Expand All @@ -55,6 +56,8 @@ class CirclePropertiesDialog final : public QDialog {
CirclePropertiesDialog(const CirclePropertiesDialog& other) = delete;
CirclePropertiesDialog(Circle& circle, UndoStack& undoStack,
QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent = nullptr) noexcept;
~CirclePropertiesDialog() noexcept;

Expand Down
12 changes: 10 additions & 2 deletions libs/librepcb/common/dialogs/holepropertiesdialog.cpp
Expand Up @@ -36,13 +36,21 @@
namespace librepcb {

HolePropertiesDialog::HolePropertiesDialog(Hole& hole, UndoStack& undoStack,
QWidget* parent) noexcept
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent) noexcept
: QDialog(parent),
mHole(hole),
mUndoStack(undoStack),
mUi(new Ui::HolePropertiesDialog) {
mUi->setupUi(this);
mUi->edtDiameter->setSingleStep(0.1); // [mm]
mUi->edtDiameter->configure(lengthUnit,
LengthEditBase::Steps::drillDiameter(),
settingsPrefix % "/diameter");
mUi->edtPosX->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_x");
mUi->edtPosY->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_y");
connect(mUi->buttonBox, &QDialogButtonBox::clicked, this,
&HolePropertiesDialog::on_buttonBox_clicked);

Expand Down
5 changes: 4 additions & 1 deletion libs/librepcb/common/dialogs/holepropertiesdialog.h
Expand Up @@ -33,6 +33,7 @@ namespace librepcb {

class UndoStack;
class Hole;
class LengthUnit;

namespace Ui {
class HolePropertiesDialog;
Expand All @@ -53,7 +54,9 @@ class HolePropertiesDialog final : public QDialog {
HolePropertiesDialog() = delete;
HolePropertiesDialog(const HolePropertiesDialog& other) = delete;
HolePropertiesDialog(Hole& hole, UndoStack& undoStack,
QWidget* parent = nullptr) noexcept;
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent = nullptr) noexcept;
~HolePropertiesDialog() noexcept;

// Operator Overloadings
Expand Down
8 changes: 6 additions & 2 deletions libs/librepcb/common/dialogs/polygonpropertiesdialog.cpp
Expand Up @@ -39,13 +39,17 @@ namespace librepcb {
PolygonPropertiesDialog::PolygonPropertiesDialog(Polygon& polygon,
UndoStack& undoStack,
QList<GraphicsLayer*> layers,
QWidget* parent) noexcept
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent) noexcept
: QDialog(parent),
mPolygon(polygon),
mUndoStack(undoStack),
mUi(new Ui::PolygonPropertiesDialog) {
mUi->setupUi(this);
mUi->edtLineWidth->setSingleStep(0.1); // [mm]
mUi->edtLineWidth->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/line_width");
mUi->pathEditorWidget->setLengthUnit(lengthUnit);

foreach (const GraphicsLayer* layer, layers) {
mUi->cbxLayer->addItem(layer->getNameTr(), layer->getName());
Expand Down
2 changes: 2 additions & 0 deletions libs/librepcb/common/dialogs/polygonpropertiesdialog.h
Expand Up @@ -58,6 +58,8 @@ class PolygonPropertiesDialog final : public QDialog {
PolygonPropertiesDialog(const PolygonPropertiesDialog& other) = delete;
PolygonPropertiesDialog(Polygon& polygon, UndoStack& undoStack,
QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent = nullptr) noexcept;
~PolygonPropertiesDialog() noexcept;

Expand Down
13 changes: 10 additions & 3 deletions libs/librepcb/common/dialogs/stroketextpropertiesdialog.cpp
Expand Up @@ -39,15 +39,22 @@ namespace librepcb {

StrokeTextPropertiesDialog::StrokeTextPropertiesDialog(
StrokeText& text, UndoStack& undoStack, QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit, const QString& settingsPrefix,
QWidget* parent) noexcept
: QDialog(parent),
mText(text),
mUndoStack(undoStack),
mUi(new Ui::StrokeTextPropertiesDialog) {
mUi->setupUi(this);
mUi->edtHeight->setSingleStep(0.5); // [mm]
mUi->edtStrokeWidth->setSingleStep(0.1); // [mm]
mUi->edtRotation->setSingleStep(90.0); // [°]
mUi->edtHeight->configure(lengthUnit, LengthEditBase::Steps::textHeight(),
settingsPrefix % "/height");
mUi->edtStrokeWidth->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/stroke_width");
mUi->edtPosX->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_x");
mUi->edtPosY->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_y");
mUi->edtRotation->setSingleStep(90.0); // [°]

foreach (const GraphicsLayer* layer, layers) {
mUi->cbxLayer->addItem(layer->getNameTr(), layer->getName());
Expand Down
3 changes: 3 additions & 0 deletions libs/librepcb/common/dialogs/stroketextpropertiesdialog.h
Expand Up @@ -34,6 +34,7 @@ namespace librepcb {
class UndoStack;
class StrokeText;
class GraphicsLayer;
class LengthUnit;

namespace Ui {
class StrokeTextPropertiesDialog;
Expand All @@ -55,6 +56,8 @@ class StrokeTextPropertiesDialog final : public QDialog {
StrokeTextPropertiesDialog(const StrokeTextPropertiesDialog& other) = delete;
StrokeTextPropertiesDialog(StrokeText& text, UndoStack& undoStack,
QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent = nullptr) noexcept;
~StrokeTextPropertiesDialog() noexcept;

Expand Down
9 changes: 8 additions & 1 deletion libs/librepcb/common/dialogs/textpropertiesdialog.cpp
Expand Up @@ -38,13 +38,20 @@ namespace librepcb {

TextPropertiesDialog::TextPropertiesDialog(Text& text, UndoStack& undoStack,
QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent) noexcept
: QDialog(parent),
mText(text),
mUndoStack(undoStack),
mUi(new Ui::TextPropertiesDialog) {
mUi->setupUi(this);
mUi->edtHeight->setSingleStep(0.5); // [mm]
mUi->edtHeight->configure(lengthUnit, LengthEditBase::Steps::textHeight(),
settingsPrefix % "/height");
mUi->edtPosX->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_x");
mUi->edtPosY->configure(lengthUnit, LengthEditBase::Steps::generic(),
settingsPrefix % "/pos_y");
mUi->edtRotation->setSingleStep(90.0); // [°]

foreach (const GraphicsLayer* layer, layers) {
Expand Down
3 changes: 3 additions & 0 deletions libs/librepcb/common/dialogs/textpropertiesdialog.h
Expand Up @@ -34,6 +34,7 @@ namespace librepcb {
class UndoStack;
class Text;
class GraphicsLayer;
class LengthUnit;

namespace Ui {
class TextPropertiesDialog;
Expand All @@ -55,6 +56,8 @@ class TextPropertiesDialog final : public QDialog {
TextPropertiesDialog(const TextPropertiesDialog& other) = delete;
TextPropertiesDialog(Text& text, UndoStack& undoStack,
QList<GraphicsLayer*> layers,
const LengthUnit& lengthUnit,
const QString& settingsPrefix,
QWidget* parent = nullptr) noexcept;
~TextPropertiesDialog() noexcept;

Expand Down
8 changes: 6 additions & 2 deletions libs/librepcb/common/model/lengthdelegate.cpp
Expand Up @@ -58,7 +58,9 @@ void LengthDelegate::setUnit(const LengthUnit& unit) noexcept {

QString LengthDelegate::displayText(const QVariant& value,
const QLocale& locale) const {
return Toolbox::floatToString(value.value<Length>().toMm(), 10, locale) %
qreal converted = mUnit.convertToUnit(value.value<Length>());
return Toolbox::floatToString(converted,
mUnit.getReasonableNumberOfDecimals(), locale) %
" " % mUnit.toShortStringTr();
}

Expand All @@ -68,7 +70,9 @@ QWidget* LengthDelegate::createEditor(QWidget* parent,
Q_UNUSED(option);
LengthEdit* edt = new LengthEdit(parent);
edt->setFrame(false);
edt->setUnit(mUnit);
edt->setButtonSymbols(QAbstractSpinBox::NoButtons);
edt->setChangeUnitActionVisible(false); // avoid wasting space
edt->setDefaultUnit(mUnit);
edt->setValue(index.data(Qt::EditRole).value<Length>());
edt->selectAll();

Expand Down
8 changes: 8 additions & 0 deletions libs/librepcb/common/units/length.cpp
Expand Up @@ -116,6 +116,14 @@ Length Length::fromPx(qreal pixels, const Length& gridInterval) {
return l.mapToGrid(gridInterval);
}

Length Length::min() noexcept {
return Length(std::numeric_limits<LengthBase_t>::min());
}

Length Length::max() noexcept {
return Length(std::numeric_limits<LengthBase_t>::max());
}

/*******************************************************************************
* Private Methods
******************************************************************************/
Expand Down