~arcachofo/simulide/1.1.0

« back to all changes in this revision

Viewing changes to src/gui/circuitwidget/components/passive/resistordip.cpp

  • Committer: arcachofo
  • Date: 2021-01-01 14:23:42 UTC
  • Revision ID: arcachofo@simulide.com-20210101142342-ozfljnll44g5lbl3
Initial Commit 0.5.15-RC3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
 *   Copyright (C) 2016 by santiago González                               *
 
3
 *   santigoro@gmail.com                                                   *
 
4
 *                                                                         *
 
5
 *   This program is free software; you can redistribute it and/or modify  *
 
6
 *   it under the terms of the GNU General Public License as published by  *
 
7
 *   the Free Software Foundation; either version 3 of the License, or     *
 
8
 *   (at your option) any later version.                                   *
 
9
 *                                                                         *
 
10
 *   This program is distributed in the hope that it will be useful,       *
 
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 
13
 *   GNU General Public License for more details.                          *
 
14
 *                                                                         *
 
15
 *   You should have received a copy of the GNU General Public License     *
 
16
 *   along with this program; if not, see <http://www.gnu.org/licenses/>.  *
 
17
 *                                                                         *
 
18
 ***************************************************************************/
 
19
 
 
20
#include "resistordip.h"
 
21
#include "circuitwidget.h"
 
22
#include "itemlibrary.h"
 
23
#include "connector.h"
 
24
#include "simulator.h"
 
25
#include "circuit.h"
 
26
#include "pin.h"
 
27
 
 
28
 
 
29
Component* ResistorDip::construct( QObject* parent, QString type, QString id )
 
30
{ return new ResistorDip( parent, type, id ); }
 
31
 
 
32
LibraryItem* ResistorDip::libraryItem()
 
33
{
 
34
    return new LibraryItem(
 
35
            tr( "ResistorDip" ),
 
36
            tr( "Passive" ),
 
37
            "resistordip.png",
 
38
            "ResistorDip",
 
39
            ResistorDip::construct);
 
40
}
 
41
 
 
42
ResistorDip::ResistorDip( QObject* parent, QString type, QString id )
 
43
           : Component( parent, type, id )
 
44
           , eResistorDip( id )
 
45
{
 
46
    m_size = 0;
 
47
    setSize( 8 );
 
48
    
 
49
    m_unit = "Ω";
 
50
    setResist( 100 );
 
51
    setValLabelX( 5 );
 
52
    setValLabelY(-26 );
 
53
    setValLabRot( 90 );
 
54
    setValLabelPos();
 
55
    //m_valLabel->setEnabled( false );
 
56
    m_valLabel->setAcceptedMouseButtons( 0 );
 
57
    setShowVal( true );
 
58
    
 
59
    setLabelPos(-24,-40, 0);
 
60
}
 
61
ResistorDip::~ResistorDip(){}
 
62
 
 
63
void ResistorDip::createResistors( int c )
 
64
{
 
65
    int start = m_size;
 
66
    m_size = m_size+c;
 
67
    m_resistor.resize( m_size );
 
68
    m_pin.resize( m_size*2 );
 
69
 
 
70
    for( int i=start; i<m_size; i++ )
 
71
    {
 
72
        int index = i*2;
 
73
        QString reid = m_id;
 
74
        reid.append(QString("-resistor"+QString::number(i)));
 
75
        m_resistor[i] = new eResistor( reid );
 
76
        
 
77
        QPoint pinpos = QPoint(-16,-32+8+i*8 );
 
78
        Pin* pin = new Pin( 180, pinpos, reid+"-ePin"+QString::number(index), 0, this);
 
79
        m_resistor[i]->setEpin( 0, pin );
 
80
        m_pin[index] = pin;
 
81
        
 
82
        pinpos = QPoint( 16,-32+8+i*8 );
 
83
        pin = new Pin( 0, pinpos, reid+"-ePin"+QString::number(index+1), 0, this);
 
84
        m_resistor[i]->setEpin( 1, pin );
 
85
        m_pin[index+1] = pin;
 
86
    }
 
87
    //update();
 
88
}
 
89
 
 
90
void ResistorDip::deleteResistors( int d )
 
91
{
 
92
    if( d > m_size ) d = m_size;
 
93
    int start = m_size-d;
 
94
 
 
95
    for( int i=start*2; i<m_size*2; i++ )
 
96
    {
 
97
        Pin* pin = m_pin[i];
 
98
        if( pin->isConnected() ) pin->connector()->remove();
 
99
        
 
100
        delete pin;
 
101
    }
 
102
    for( int i=start; i<m_size; i++ ) delete m_resistor[i];
 
103
    m_size = m_size-d;
 
104
    m_resistor.resize( m_size );
 
105
    m_pin.resize( m_size*2 );
 
106
    //Circuit::self()->update();
 
107
}
 
108
 
 
109
int ResistorDip::size()
 
110
{
 
111
    return m_size;
 
112
}
 
113
 
 
114
void ResistorDip::setSize( int size )
 
115
{
 
116
    if( Simulator::self()->isRunning() )  CircuitWidget::self()->powerCircOff();
 
117
    
 
118
    if( size == 0 ) size = 8;
 
119
    
 
120
    if     ( size < m_size ) deleteResistors( m_size-size );
 
121
    else if( size > m_size ) createResistors( size-m_size );
 
122
    
 
123
    m_area = QRect( -10, -30, 20, m_size*8+4 );
 
124
    setValLabelY(-26 );
 
125
 
 
126
    Circuit::self()->update();
 
127
}
 
128
 
 
129
double ResistorDip::resist() { return m_value; }
 
130
 
 
131
void ResistorDip::setResist( double r )
 
132
{
 
133
    bool pauseSim = Simulator::self()->isRunning();
 
134
    if( pauseSim )  Simulator::self()->pauseSim();
 
135
    
 
136
    if( r == 0 ) r = 0.001;
 
137
    Component::setValue( r );       // Takes care about units multiplier
 
138
    
 
139
    setRes( m_value*m_unitMult );
 
140
    
 
141
    if( pauseSim ) Simulator::self()->resumeSim();
 
142
}
 
143
 
 
144
void ResistorDip::setUnit( QString un ) 
 
145
{
 
146
    bool pauseSim = Simulator::self()->isRunning();
 
147
    if( pauseSim )  Simulator::self()->pauseSim();
 
148
    
 
149
    Component::setUnit( un );
 
150
    setRes( m_value*m_unitMult );
 
151
    
 
152
    if( pauseSim ) Simulator::self()->resumeSim();
 
153
}
 
154
 
 
155
void ResistorDip::remove()
 
156
{
 
157
    deleteResistors( m_size );
 
158
 
 
159
    Component::remove();
 
160
}
 
161
void ResistorDip::paint( QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget )
 
162
{
 
163
    Component::paint( p, option, widget );
 
164
    
 
165
    //p->setBrush( QColor( 80, 80, 80) );
 
166
 
 
167
    p->drawRoundRect( QRect( -9, -28, 18, m_size*8 ), 2, 2 );
 
168
}
 
169
 
 
170
#include "moc_resistordip.cpp"
 
171