コード例 #1
0
ファイル: matrixdisplay.cpp プロジェクト: Munrek/ktechlab
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());
            }
        }
    }
}
コード例 #2
0
ファイル: bidirled.cpp プロジェクト: zoltanp/ktechlab-0.3
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);
}
コード例 #3
0
ファイル: ecpotentiometer.cpp プロジェクト: Munrek/ktechlab
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), "");
}
コード例 #4
0
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());
}
コード例 #5
0
ファイル: probe.cpp プロジェクト: zoltanp/ktechlab-0.3
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());
}
コード例 #6
0
ファイル: meter.cpp プロジェクト: zoltanp/ktechlab-0.3
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);
}
コード例 #7
0
ファイル: ecsignallamp.cpp プロジェクト: zoltanp/ktechlab-0.3
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;
}
コード例 #8
0
ファイル: capacitor.cpp プロジェクト: zoltanp/ktechlab-0.3
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);
}
コード例 #9
0
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), "");
}