File indexing completed on 2024-05-05 05:46:04
0001 /*************************************************************************** 0002 * Copyright (C) 2003-2004 by David Saxton * 0003 * david@bluehaze.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "eccurrentsignal.h" 0012 #include "currentsignal.h" 0013 #include "ecnode.h" 0014 #include "libraryitem.h" 0015 #include "pin.h" 0016 #include "simulator.h" 0017 0018 #include <KLocalizedString> 0019 #include <QPainter> 0020 0021 Item *ECCurrentSignal::construct(ItemDocument *itemDocument, bool newItem, const char *id) 0022 { 0023 return new ECCurrentSignal(static_cast<ICNDocument *>(itemDocument), newItem, id); 0024 } 0025 0026 LibraryItem *ECCurrentSignal::libraryItem() 0027 { 0028 return new LibraryItem(QStringList(QString("ec/ac_current")), i18n("Current Signal"), i18n("Sources"), "currentsignal.png", LibraryItem::lit_component, ECCurrentSignal::construct); 0029 } 0030 0031 ECCurrentSignal::ECCurrentSignal(ICNDocument *icnDocument, bool newItem, const char *id) 0032 : Component(icnDocument, newItem, id ? id : "current_signal") 0033 { 0034 m_name = i18n("Current Signal"); 0035 setSize(-8, -8, 16, 16); 0036 0037 init1PinLeft(); 0038 init1PinRight(); 0039 0040 m_pNNode[0]->pin()->setGroundType(Pin::gt_low); 0041 m_currentSignal = createCurrentSignal(m_pNNode[0], m_pPNode[0], 0.); 0042 m_currentSignal->setStep(ElementSignal::st_sinusoidal, 50.); 0043 0044 createProperty("1-frequency", Variant::Type::Double); 0045 property("1-frequency")->setCaption(i18n("Frequency")); 0046 property("1-frequency")->setUnit("Hz"); 0047 property("1-frequency")->setMinValue(1e-9); 0048 property("1-frequency")->setMaxValue(1e3); 0049 property("1-frequency")->setValue(50.0); 0050 0051 createProperty("1-current", Variant::Type::Double); 0052 property("1-current")->setCaption(i18n("Current Range")); 0053 property("1-current")->setUnit("A"); 0054 property("1-current")->setMinValue(-1e12); 0055 property("1-current")->setMaxValue(1e12); 0056 property("1-current")->setValue(0.02); 0057 0058 addDisplayText("~", QRect(-8, -8, 16, 16), "~"); 0059 addDisplayText("current", QRect(-16, -24, 32, 16), ""); 0060 } 0061 0062 ECCurrentSignal::~ECCurrentSignal() 0063 { 0064 } 0065 0066 void ECCurrentSignal::dataChanged() 0067 { 0068 const double current = dataDouble("1-current"); 0069 const double frequency = dataDouble("1-frequency"); 0070 0071 QString display = QString::number(current / getMultiplier(current), 'g', 3) + getNumberMag(current) + "A"; 0072 setDisplayText("current", display); 0073 0074 m_currentSignal->setStep(ElementSignal::st_sinusoidal, frequency); 0075 m_currentSignal->setCurrent(current); 0076 } 0077 0078 void ECCurrentSignal::drawShape(QPainter &p) 0079 { 0080 initPainter(p); 0081 p.drawEllipse(int(x()) - 8, int(y()) - 8, width(), height()); 0082 deinitPainter(p); 0083 }