diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp index be933ab63..8eccb75df 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp @@ -90,6 +90,31 @@ void drawGroundSymbol(QPainter *painter) painter->drawLine(QPointF{-1, 4}, QPointF{1, 4}); } + //Two diodes side by side, wired in anti-parallel between the top and + //the bottom of the terminal (current flows through the left one from + //the top to the bottom and through the right one the other way) +void drawAntiParallelDiodesSymbol(QPainter *painter) +{ + painter->drawLine(QPointF{0, -7}, QPointF{0, -5}); + painter->drawLine(QPointF{-5, -5}, QPointF{5, -5}); + painter->drawLine(QPointF{0, 5}, QPointF{0, 7}); + painter->drawLine(QPointF{-5, 5}, QPointF{5, 5}); + + //Left diode, anode on top + const QPointF left_diode[3] { {-8, -3}, {-2, -3}, {-5, 2} }; + painter->drawLine(QPointF{-5, -5}, QPointF{-5, -3}); + painter->drawPolygon(left_diode, 3); + painter->drawLine(QPointF{-8, 2}, QPointF{-2, 2}); + painter->drawLine(QPointF{-5, 2}, QPointF{-5, 5}); + + //Right diode, anode at the bottom + const QPointF right_diode[3] { {2, 2}, {8, 2}, {5, -3} }; + painter->drawLine(QPointF{5, -5}, QPointF{5, -3}); + painter->drawPolygon(right_diode, 3); + painter->drawLine(QPointF{2, -3}, QPointF{8, -3}); + painter->drawLine(QPointF{5, 2}, QPointF{5, 5}); +} + /** * @brief drawScaled * Call @a draw with the painter moved by @a dx and scaled by @a factor. @@ -147,6 +172,7 @@ void drawTypeSymbol(QPainter *painter, const QRectF &box, ElementData::TerminalT case ElementData::TTSectional : drawSectionalSymbol(p); break; case ElementData::TTDiode : drawDiodeSymbol(p); break; case ElementData::TTGround : drawGroundSymbol(p); break; + case ElementData::TTAntiParallelDiodes : drawAntiParallelDiodesSymbol(p); break; default: break; } }; diff --git a/sources/TerminalStrip/ui/freeterminaleditor.cpp b/sources/TerminalStrip/ui/freeterminaleditor.cpp index 50e006d7b..3f08e39d6 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.cpp +++ b/sources/TerminalStrip/ui/freeterminaleditor.cpp @@ -191,6 +191,8 @@ void FreeTerminalEditor::on_m_type_cb_activated(int index) override_type = ElementData::TTDiode; break; case 4: override_type = ElementData::TTGround; break; + case 5: + override_type = ElementData::TTAntiParallelDiodes; break; default: override_type = ElementData::TTGeneric; break; } diff --git a/sources/TerminalStrip/ui/freeterminaleditor.ui b/sources/TerminalStrip/ui/freeterminaleditor.ui index 56f6c4c2a..736c2b12d 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.ui +++ b/sources/TerminalStrip/ui/freeterminaleditor.ui @@ -122,6 +122,11 @@ Ground + + + Anti-parallel diodes + + diff --git a/sources/TerminalStrip/ui/freeterminalmodel.cpp b/sources/TerminalStrip/ui/freeterminalmodel.cpp index 27183100e..7eb2eb1f6 100644 --- a/sources/TerminalStrip/ui/freeterminalmodel.cpp +++ b/sources/TerminalStrip/ui/freeterminalmodel.cpp @@ -429,6 +429,7 @@ QWidget *FreeTerminalModelDelegate::createEditor(QWidget *parent, const QStyleOp qcb->addItem(ElementData::translatedTerminalType(ElementData::TTSectional), ElementData::TTSectional); qcb->addItem(ElementData::translatedTerminalType(ElementData::TTDiode), ElementData::TTDiode); qcb->addItem(ElementData::translatedTerminalType(ElementData::TTGround), ElementData::TTGround); + qcb->addItem(ElementData::translatedTerminalType(ElementData::TTAntiParallelDiodes), ElementData::TTAntiParallelDiodes); return qcb; } diff --git a/sources/TerminalStrip/ui/terminalstripeditor.cpp b/sources/TerminalStrip/ui/terminalstripeditor.cpp index 9a56339b0..ba3964f1e 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.cpp +++ b/sources/TerminalStrip/ui/terminalstripeditor.cpp @@ -569,6 +569,8 @@ void TerminalStripEditor::on_m_type_cb_activated(int index) override_type = ElementData::TTDiode; break; case 4: override_type = ElementData::TTGround; break; + case 5: + override_type = ElementData::TTAntiParallelDiodes; break; default: override_type = ElementData::TTGeneric; break; } diff --git a/sources/TerminalStrip/ui/terminalstripeditor.ui b/sources/TerminalStrip/ui/terminalstripeditor.ui index 35fbb9f5d..46998a04e 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.ui +++ b/sources/TerminalStrip/ui/terminalstripeditor.ui @@ -127,6 +127,11 @@ Ground + + + Anti-parallel diodes + + diff --git a/sources/TerminalStrip/ui/terminalstripmodel.cpp b/sources/TerminalStrip/ui/terminalstripmodel.cpp index c6e3fac46..2f363ba1c 100644 --- a/sources/TerminalStrip/ui/terminalstripmodel.cpp +++ b/sources/TerminalStrip/ui/terminalstripmodel.cpp @@ -833,6 +833,7 @@ QWidget *TerminalStripModelDelegate::createEditor(QWidget *parent, const QStyleO qcb->addItem(ElementData::translatedTerminalType(ElementData::TTSectional), ElementData::TTSectional); qcb->addItem(ElementData::translatedTerminalType(ElementData::TTDiode), ElementData::TTDiode); qcb->addItem(ElementData::translatedTerminalType(ElementData::TTGround), ElementData::TTGround); + qcb->addItem(ElementData::translatedTerminalType(ElementData::TTAntiParallelDiodes), ElementData::TTAntiParallelDiodes); return qcb; } diff --git a/sources/editor/ui/elementpropertieseditorwidget.cpp b/sources/editor/ui/elementpropertieseditorwidget.cpp index 178d08a21..d45477483 100644 --- a/sources/editor/ui/elementpropertieseditorwidget.cpp +++ b/sources/editor/ui/elementpropertieseditorwidget.cpp @@ -225,6 +225,7 @@ void ElementPropertiesEditorWidget::setUpInterface() ui->m_terminal_type_cb->addItem(tr("Sectionable"), ElementData::TTSectional); ui->m_terminal_type_cb->addItem(tr("Diode"), ElementData::TTDiode); ui->m_terminal_type_cb->addItem(tr("Ground"), ElementData::TTGround); + ui->m_terminal_type_cb->addItem(tr("Anti-parallel diodes"), ElementData::TTAntiParallelDiodes); ui->m_terminal_func_cb->addItem(tr("Generic"), ElementData::TFGeneric); ui->m_terminal_func_cb->addItem(tr("Phase"), ElementData::TFPhase); diff --git a/sources/properties/elementdata.cpp b/sources/properties/elementdata.cpp index 8586c243e..2804295ed 100644 --- a/sources/properties/elementdata.cpp +++ b/sources/properties/elementdata.cpp @@ -840,6 +840,8 @@ QString ElementData::terminalTypeToString(ElementData::TerminalType type) return QStringLiteral("diode"); case ElementData::TTGround: return QStringLiteral("ground"); + case ElementData::TTAntiParallelDiodes: + return QStringLiteral("antiparallel_diodes"); } return QStringLiteral("generic"); } @@ -856,6 +858,8 @@ ElementData::TerminalType ElementData::terminalTypeFromString(const QString &str return ElementData::TTDiode; } else if (string == QLatin1String("ground")) { return ElementData::TTGround; + } else if (string == QLatin1String("antiparallel_diodes")) { + return ElementData::TTAntiParallelDiodes; } qDebug() << "ElementData::terminalTypeFromString : string : " @@ -877,6 +881,8 @@ QString ElementData::translatedTerminalType(ElementData::TerminalType type) return QObject::tr("Diode", "diode terminal element type"); case ElementData::TTGround: return QObject::tr("Ground", "ground terminal element type"); + case ElementData::TTAntiParallelDiodes: + return QObject::tr("Anti-parallel diodes", "anti-parallel diodes terminal element type"); } return QObject::tr("Generic", "generic terminal element type"); } diff --git a/sources/properties/elementdata.h b/sources/properties/elementdata.h index 51b9c9678..97a834840 100644 --- a/sources/properties/elementdata.h +++ b/sources/properties/elementdata.h @@ -175,7 +175,8 @@ class ElementData : public PropertiesInterface TTFuse, TTSectional, TTDiode, - TTGround + TTGround, + TTAntiParallelDiodes }; Q_ENUM(TerminalType)