void MatrixDisplay::dataChanged() { QColor color = dataColor("color"); m_r = double(color.red()) / 0x100; m_g = double(color.green()) / 0x100; m_b = double(color.blue()) / 0x100; int numRows = dataInt("0-rows"); int numCols = dataInt("1-cols"); bool ledsChanged = (numRows != int(m_numRows)) || (numCols != int(m_numCols)); if (ledsChanged) { for (unsigned i = 0; i < m_numCols; i++) for (unsigned j = 0; j < m_numRows; j++) // must remove elements before re-organizing storage. removeElement(&(m_LEDs[i][j].m_pDiode), (i == (m_numCols - 1)) && (j == (m_numRows - 1))); initPins(numRows, numCols); } bool rowCathode = dataString("diode-configuration") == "Row Cathode"; if ((rowCathode != m_bRowCathode) || ledsChanged) { m_bRowCathode = rowCathode; for (unsigned i = 0; i < m_numCols; i++) { for (unsigned j = 0; j < m_numRows; j++) { if (rowCathode) { setup2pinElement(m_LEDs[i][j].m_pDiode, m_pColNodes[i]->pin(), m_pRowNodes[j]->pin()); } else setup2pinElement(m_LEDs[i][j].m_pDiode, m_pRowNodes[j]->pin(), m_pColNodes[i]->pin()); } } } }
BiDirLED::BiDirLED(ICNDocument *icnDocument, bool newItem, const char *id) : SimpleComponent(icnDocument, newItem, id ? id : "bidir_led") { m_name = i18n("Bidirectional LED"); m_bDynamicContent = true; setSize(-8, -16, 16, 32); init1PinLeft(); init1PinRight(); setSize(-8, -24, 24, 40); m_pDiode[0] = new Diode(); setup2pinElement(*(m_pDiode[0]), m_pNNode[0]->pin(), m_pPNode[0]->pin()); m_pDiode[1] = new Diode(); setup2pinElement(*(m_pDiode[1]), m_pPNode[0]->pin(), m_pNNode[0]->pin()); avg_brightness[0] = avg_brightness[1] = 255; lastUpdatePeriod = 0.; r[0] = r[1] = g[0] = g[1] = b[0] = b[1] = 0; last_brightness[0] = last_brightness[1] = 255; createProperty("0-color1", Variant::Type::Color); property("0-color1")->setCaption(i18n("Color 1")); property("0-color1")->setColorScheme(ColorCombo::LED); createProperty("0-color2", Variant::Type::Color); property("0-color2")->setCaption(i18n("Colour 2")); property("0-color2")->setColorScheme(ColorCombo::LED); }
ECPotentiometer::ECPotentiometer(ICNDocument *icnDocument, bool newItem, const char *id) : Component(icnDocument, newItem, id ? id : "potentiometer") { m_name = i18n("Potentiometer"); setSize(-16, -16, 40, 32); ECNode *m_p1 = createPin(32, 0, 180, "p1"); m_sliderProp = 0.0; m_resistance = 5000.; setup2pinElement(m_r1, createPin(-8, -24, 90, "n1")->pin(), m_p1->pin()); setup2pinElement(m_r2, createPin(-8, 24, 270, "n2")->pin(), m_p1->pin()); Slider * s = addSlider("slider", 0, 100, 5, 50, Qt::Vertical, QRect(0, -16, 16, 32)); m_pSlider = static_cast<QSlider*>(s->widget()); createProperty("resistance", Variant::Type::Double); property("resistance")->setCaption(i18n("Resistance")); property("resistance")->setUnit(QChar(0x3a9)); property("resistance")->setMinValue(1e-6); property("resistance")->setValue(1e5); addDisplayText("res", QRect(-56, -8, 40, 16), ""); }
VariableCapacitor::VariableCapacitor(ICNDocument* icnDocument, bool newItem, const QString& id) : SimpleComponent(icnDocument, newItem, id ? id : "variable capacitor"), m_pCapacitance(m_currCapacitance, LINEAR_UPDATE_PERIOD) { m_name = i18n("Variable Capacitor"); // Top Left(x,y) from centre point, width, height. setSize(-16, -8, 32, 16); // william - you might want to change this value. I added this line as it // was being used unitialized (in the sliderValueChanged function when // addSlider is called later on), and causing a crash - david. m_tickValue = 1; m_maxCapacitance = 0.0001; m_minCapacitance = 0.00005; m_currCapacitance = m_minCapacitance + ((m_maxCapacitance - m_minCapacitance) / 2); init1PinLeft(); init1PinRight(); m_pNNode[0]->setLength(15); m_pPNode[0]->setLength(15); setup2pinElement(m_pCapacitance, m_pNNode[0]->pin(), m_pPNode[0]->pin()); addDisplayText("capacitance", QRect(-8, -26, 16, 16), "", false); createProperty("currcapacitance", Variant::Type::Double); property("currcapacitance")->setCaption(i18n("Capacitance")); property("currcapacitance")->setUnit("F"); property("currcapacitance")->setMinValue(1e-12); property("currcapacitance")->setMaxValue(1e12); property("currcapacitance")->setValue(m_currCapacitance); createProperty("maximum capacitance", Variant::Type::Double); property("maximum capacitance")->setCaption(i18n("Max")); property("maximum capacitance")->setUnit("F"); property("maximum capacitance")->setMinValue(1e-12); property("maximum capacitance")->setMaxValue(1e12); property("maximum capacitance")->setValue(m_maxCapacitance); createProperty("minimum capacitance", Variant::Type::Double); property("minimum capacitance")->setCaption(i18n("Min")); property("minimum capacitance")->setUnit("F"); property("minimum capacitance")->setMinValue(1e-12); property("minimum capacitance")->setMaxValue(1e12); property("minimum capacitance")->setValue(m_minCapacitance); Slider * s = addSlider("slider", 0, 100, 1, 50, Qt::Horizontal, QRect(-16, 10, 32, 16)); m_pSlider = static_cast<QSlider*>(s->widget()); }
CurrentProbe::CurrentProbe(ICNDocument *icnDocument, bool newItem, const char *id) : FloatingProbe(icnDocument, newItem, id ? id : "currentprobe"), m_voltageSource(0) { m_name = i18n("Current Probe"); property("upper_abs_value")->setUnit("A"); property("lower_abs_value")->setUnit("A"); init1PinLeft(0); init1PinRight(0); setup2pinElement(m_voltageSource, m_pNNode[0]->pin(), m_pPNode[0]->pin()); }
ECAmmeter::ECAmmeter(ICNDocument *icnDocument, bool newItem, const char *id) : Meter(icnDocument, newItem, id ? id : "ammeter") { m_name = i18n("Ammeter"); setSize(-16, -16, 32, 32); m_unit = "A"; init1PinLeft(0); init1PinRight(0); setup2pinElement(m_voltageSource, m_pNNode[0]->pin(), m_pPNode[0]->pin()); m_voltageSource.setVoltage(0); }
ECSignalLamp::ECSignalLamp(ICNDocument *icnDocument, bool newItem, const char *id) : SimpleComponent(icnDocument, newItem, id ? id : "signal_lamp") { m_name = i18n("Signal Lamp"); setSize(-8, -8, 16, 16); init1PinLeft(); init1PinRight(); // createResistance(m_pPNode[0]->pin(), m_pNNode[0]->pin(), RESISTANCE); the_filament.setResistance(RESISTANCE); setup2pinElement(the_filament, m_pPNode[0]->pin(), m_pNNode[0]->pin()); advanceSinceUpdate = 0; avgPower = 0.; m_bDynamicContent = true; }
Capacitor::Capacitor(ICNDocument *icnDocument, bool newItem, const char *id) : SimpleComponent(icnDocument, newItem, id ? id : "capacitor"), m_capacitance(0.001, LINEAR_UPDATE_PERIOD) { m_name = i18n("Capacitor"); setSize(-8, -8, 16, 16); init1PinLeft(); init1PinRight(); ; setup2pinElement(m_capacitance, m_pNNode[0]->pin(), m_pPNode[0]->pin()); createProperty("Capacitance", Variant::Type::Double); property("Capacitance")->setCaption(i18n("Capacitance")); property("Capacitance")->setUnit("F"); property("Capacitance")->setMinValue(1e-12); property("Capacitance")->setMaxValue(1e12); property("Capacitance")->setValue(1e-3); addDisplayText("capacitance", QRect(-8, -24, 16, 16), "", false); }
ECCell::ECCell(ICNDocument *icnDocument, bool newItem, const char *id) : SimpleComponent(icnDocument, newItem, id ? id : "cell") { m_name = i18n("Battery"); setSize(-8, -8, 16, 16); init1PinLeft(); init1PinRight(); m_pNNode[0]->pin().setGroundType(Pin::gt_medium); setup2pinElement(m_voltageSource, m_pNNode[0]->pin(), m_pPNode[0]->pin()); createProperty("voltage", Variant::Type::Double); property("voltage")->setUnit("V"); property("voltage")->setCaption(i18n("Voltage")); property("voltage")->setMinValue(-1e12); property("voltage")->setMaxValue(1e12); property("voltage")->setValue(5.0); addDisplayText("voltage", QRect(-16, -24, 32, 16), ""); }