Skip to content

Commit

Permalink
Merge pull request #684 from LibrePCB/362-editors-use-workspace-lengt…
Browse files Browse the repository at this point in the history
…h-unit

Respect configured workspace length unit in editors
(cherry picked from commit a125ae6)
  • Loading branch information
ubruhin committed Apr 22, 2020
1 parent e2c062d commit fc5d883
Show file tree
Hide file tree
Showing 91 changed files with 1,855 additions and 319 deletions.
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 @@ -130,6 +131,7 @@ SOURCES += \
utils/clipperhelpers.cpp \
utils/exclusiveactiongroup.cpp \
utils/graphicslayerstackappearancesettings.cpp \
utils/mathparser.cpp \
utils/toolbarproxy.cpp \
utils/undostackactiongroup.cpp \
uuid.cpp \
Expand All @@ -145,6 +147,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 @@ -275,6 +278,7 @@ HEADERS += \
utils/clipperhelpers.h \
utils/exclusiveactiongroup.h \
utils/graphicslayerstackappearancesettings.h \
utils/mathparser.h \
utils/toolbarproxy.h \
utils/undostackactiongroup.h \
uuid.h \
Expand All @@ -290,6 +294,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

0 comments on commit fc5d883

Please sign in to comment.