Example #1
0
//BEGIN class MultiInputGate
MultiInputGate::MultiInputGate(ICNDocument *icnDocument, bool newItem, const char *id, const QString &rectangularShapeText, bool invertedOutput, int baseWidth, bool likeOR)
                        :   SimpleComponent(icnDocument, newItem, id),
                            m_bInvertedOutput(invertedOutput) {

	m_bLikeOR = likeOR;
	m_bDoneInit = false;
	m_numInputs = 0;
	m_distinctiveWidth = baseWidth;
	m_rectangularShapeText = rectangularShapeText;

	for (int i = 0; i < maxGateInput; ++i) {
		inLogic[i] = 0;
		inNode[i]  = 0;
	}

	updateLogicSymbolShape();

	updateInputs(2);
	init1PinRight(16);

	setup1pinElement(m_pOut, m_pPNode[0]->pin());

	createProperty("numInput", Variant::Type::Int);
	property("numInput")->setCaption(i18n("Number Inputs"));
	property("numInput")->setMinValue(2);
	property("numInput")->setMaxValue(maxGateInput);
	property("numInput")->setValue(2);

	m_bDoneInit = true;
}
Example #2
0
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);
}
ECCurrentSignal::ECCurrentSignal( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, id ? id : "current_signal" )
{
	m_name = i18n("Current Signal");
	setSize( -8, -8, 16, 16 );
	
	init1PinLeft();
	init1PinRight();
	
	m_pNNode[0]->pin()->setGroundType( Pin::gt_low );
	m_currentSignal = createCurrentSignal( m_pNNode[0], m_pPNode[0], 0. );
	m_currentSignal->setStep(ElementSignal::st_sinusoidal, 50. );
	
	createProperty( "1-frequency", Variant::Type::Double );
	property("1-frequency")->setCaption( i18n("Frequency") );
	property("1-frequency")->setUnit("Hz");
	property("1-frequency")->setMinValue(1e-9);
	property("1-frequency")->setMaxValue(1e3);
	property("1-frequency")->setValue(50.0);
	
	createProperty( "1-current", Variant::Type::Double );
	property("1-current")->setCaption( i18n("Current Range") );
	property("1-current")->setUnit("A");
	property("1-current")->setMinValue(-1e12);
	property("1-current")->setMaxValue(1e12);
	property("1-current")->setValue(0.02);
	
	addDisplayText( "~", QRect( -8, -8, 16, 16 ), "~" );
	addDisplayText( "current", QRect( -16, -24, 32, 16 ), "" );
}
Example #4
0
ECGround::ECGround( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, (id) ? id : "ground" )
{
	m_name = i18n("Ground");
	setSize( -8, -8, 16, 16 );
	init1PinRight();
	m_pPNode[0]->pin()->setGroundType( Pin::gt_always );
	setAngleDegrees(270);
}
Example #5
0
ECVoltMeter::ECVoltMeter( ICNDocument *icnDocument, bool newItem, const char *id )
	: Meter( icnDocument, newItem, id ? id : "voltmeter" )
{
	m_name = i18n("Voltmeter");
	m_unit = "V";
	
	init1PinLeft(0);
	init1PinRight(0);
}
Example #6
0
VoltageProbe::VoltageProbe(ICNDocument *icnDocument, bool newItem, const char *id)
		: FloatingProbe(icnDocument, newItem, id ? id : "voltageprobe") {
	m_name = i18n("Voltage Probe");

	property("upper_abs_value")->setUnit("V");
	property("lower_abs_value")->setUnit("V");

	init1PinLeft();
	init1PinRight();
	m_pPin1 = &m_pNNode[0]->pin();
	m_pPin2 = &m_pPNode[0]->pin();
}
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());
}
Example #8
0
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());
}
Example #9
0
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);
}
Example #10
0
LogicProbe::LogicProbe(ICNDocument *icnDocument, bool newItem, const char *id)
		: Probe(icnDocument, newItem, id ? id : "probe") {
	m_name = i18n("Logic Probe");

	init1PinRight();

	setup1pinElement(m_pIn, m_pPNode[0]->pin());

	p_probeData = p_logicProbeData = static_cast<LogicProbeData*>(registerProbe(this));
	property("color")->setValue(p_probeData->color());

	m_pIn.setCallback(this, (CallbackPtr)(&LogicProbe::logicCallback));
	logicCallback(false);
}
Example #11
0
Inverter::Inverter( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, id ? id : "not" )
{
	m_name = i18n("Inverter");
	setSize( -8, -8, 16, 16 );

	init1PinLeft();
	init1PinRight();
	
	m_pIn = createLogicIn(m_pNNode[0]);
	m_pOut = createLogicOut( m_pPNode[0], true );
	
	m_pIn->setCallback( this, (CallbackPtr)(&Inverter::inStateChanged) );
	inStateChanged(false);
}
Example #12
0
ECSignalLamp::ECSignalLamp( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, id ? id : "signal_lamp" )
{
	m_name = i18n("Signal Lamp");
	setSize( -8, -8, 16, 16 );
	
	init1PinLeft();
	init1PinRight();
	
	createResistance( m_pPNode[0], m_pNNode[0], RESISTANCE );
	
	advanceSinceUpdate = 0;
	avgPower = 0.;
	m_bDynamicContent = true;
}
Example #13
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;
}
Example #14
0
ECLogicInput::ECLogicInput( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, (id) ? id : "logic_input" )
{
	m_name = i18n("Logic Input");
	setSize( -8, -8, 16, 16 );
	
	b_state = false;
	addButton( "button", QRect( -24, -8, 16, 16 ), "", true );
	
	createProperty( "useToggle", Variant::Type::Bool );
	property("useToggle")->setCaption( i18n("Use Toggle") );
	property("useToggle")->setValue(true);

	init1PinRight();
	
	m_pOut = createLogicOut( m_pPNode[0], false );
}
VariableResistor::VariableResistor( ICNDocument* icnDocument, bool newItem, const QString& id )
    : Component( icnDocument, newItem, (!id.isEmpty()) ? id : "variable resistor" )
{
    m_name = i18n("Resistor");

    // Top Left(x,y) from centre point, width, height.
    setSize( -16, -16, 32, 32 );

    init1PinLeft();
    init1PinRight();

    // (see comment in variablecapacitor.cpp) - david
    m_tickValue = 1;

    m_minResistance = 0.5;
    m_maxResistance = 1.0;

    m_currResistance = m_minResistance + ( ( m_maxResistance - m_minResistance ) / 2 ) ;

    m_pResistance = createResistance( m_pPNode[0], m_pNNode[0], m_currResistance );

    createProperty( "resistance", Variant::Type::Double );
    property("resistance")->setCaption( i18n("Resistance") );
    property("resistance")->setUnit( QChar( 0x3a9 ) );
    property("resistance")->setMinValue( 1e-6 );
    property("resistance")->setValue( m_currResistance );

    createProperty( "minimum resistance", Variant::Type::Double );
    property("minimum resistance")->setCaption( i18n("Min") );
    property("minimum resistance")->setUnit( QChar( 0x3a9 ) );
    property("minimum resistance")->setMinValue( 1e-6 );
    property("minimum resistance")->setValue( m_minResistance );

    createProperty( "maximum resistance", Variant::Type::Double );
    property("maximum resistance")->setCaption( i18n("Max") );
    property("maximum resistance")->setUnit( QChar( 0x3a9 ) );
    property("maximum resistance")->setMinValue( 1e-6 );
    property("maximum resistance")->setValue( m_maxResistance );

    addDisplayText( "res", QRect( -16, -26, 32, 12 ), "", false );

    Slider * s = addSlider( "slider", 0, 100, 1, 50, Qt::Horizontal, QRect( -16, 14, width(), 16 ) );
    m_pSlider = static_cast<QSlider*>( s->widget() );

}
Example #16
0
Capacitor::Capacitor( ICNDocument *icnDocument, bool newItem, const char *id )
	: Component( icnDocument, newItem, id ? id : "capacitor" )
{
	m_name = i18n("Capacitor");
	setSize( -8, -8, 16, 16 );
	
	init1PinLeft();
	init1PinRight();
	
	m_capacitance = createCapacitance( m_pNNode[0], m_pPNode[0], 0.001 );
	
	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 );
}
Example #17
0
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);
}
Example #18
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), "");
}