~arcachofo/simulide/1.1.0

« back to all changes in this revision

Viewing changes to src/gui/circuitwidget/components/other/textcomponent.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) 2017 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 "textcomponent.h"
 
21
#include "circuit.h"
 
22
 
 
23
static const char* TextComponent_properties[] = {
 
24
    QT_TRANSLATE_NOOP("App::Property","Text"),
 
25
    QT_TRANSLATE_NOOP("App::Property","Font"),
 
26
    QT_TRANSLATE_NOOP("App::Property","Font Size"),
 
27
    QT_TRANSLATE_NOOP("App::Property","Fixed Width"),
 
28
    QT_TRANSLATE_NOOP("App::Property","Margin"),
 
29
    QT_TRANSLATE_NOOP("App::Property","Border"),
 
30
    QT_TRANSLATE_NOOP("App::Property","Opacity")
 
31
};
 
32
 
 
33
Component* TextComponent::construct( QObject* parent, QString type, QString id )
 
34
{
 
35
    return new TextComponent( parent, type, id );
 
36
}
 
37
 
 
38
LibraryItem* TextComponent::libraryItem()
 
39
{
 
40
    return new LibraryItem(
 
41
        tr( "Text" ),
 
42
        tr( "Graphical" ),
 
43
        "text.png",
 
44
        "TextComponent",
 
45
    TextComponent::construct );
 
46
}
 
47
 
 
48
TextComponent::TextComponent( QObject* parent, QString type, QString id )
 
49
             : Component( parent, type, id )
 
50
{
 
51
    Q_UNUSED( TextComponent_properties );
 
52
 
 
53
    m_graphical = true;
 
54
 
 
55
    m_opac = 1;
 
56
    
 
57
    m_color = QColor( 255, 255, 220 );
 
58
    m_font  = "Helvetica [Cronyx]";
 
59
 
 
60
    QFont sansFont( m_font, 10 );
 
61
    #if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
 
62
    sansFont.setWeight( QFont::Medium );
 
63
    #else
 
64
    sansFont.setWeight( QFont::Normal);
 
65
    #endif
 
66
    sansFont.setFixedPitch(true);
 
67
 
 
68
    m_text = new QGraphicsTextItem( this );
 
69
    //m_text->setTextInteractionFlags( Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
 
70
    m_text->setTextInteractionFlags( 0 );
 
71
    m_text->setTextWidth( 90 );
 
72
    m_text->setFont( sansFont );
 
73
    m_text->setPlainText("... TEXT ...");
 
74
    m_text->setPos( 0, 0 );
 
75
    m_text->document()->setTextWidth(-1);
 
76
    m_text->setDefaultTextColor( Qt::darkBlue );
 
77
    m_text->setCursor( Qt::OpenHandCursor );
 
78
    m_text->installEventFilter( this );
 
79
 
 
80
    m_margin = 5;
 
81
    m_border = 1;
 
82
    updateGeometry( 0, 0, 0 );
 
83
    
 
84
    setFontSize( 10 );
 
85
 
 
86
    connect(m_text->document(), SIGNAL( contentsChange(int, int, int )),
 
87
                          this, SLOT( updateGeometry(int, int, int )), Qt::UniqueConnection );
 
88
}
 
89
TextComponent::~TextComponent(){}
 
90
 
 
91
void TextComponent::updateGeometry(int, int, int)
 
92
{
 
93
    m_text->document()->setTextWidth(-1);
 
94
    
 
95
    int margin = m_margin;
 
96
    
 
97
    m_area = QRect( -margin, -margin, m_text->boundingRect().width()+margin*2, m_text->boundingRect().height()+margin*2 );
 
98
    
 
99
    Circuit::self()->update();
 
100
}
 
101
 
 
102
int TextComponent::margin() { return m_margin; }
 
103
 
 
104
void TextComponent::setMargin( int margin )
 
105
{
 
106
    if( margin < 2 ) margin = 2;
 
107
    m_margin = margin;
 
108
    updateGeometry( 0, 0, 0 );
 
109
}
 
110
 
 
111
bool TextComponent::fixedW() { return m_fixedW; }
 
112
 
 
113
void TextComponent::setFixedW( bool fixedW ) 
 
114
 
115
    m_fixedW = fixedW;
 
116
    
 
117
    QFont font = m_text->font();
 
118
    font.setFixedPitch( fixedW );
 
119
    m_text->setFont( font );
 
120
    updateGeometry( 0, 0, 0 );
 
121
}
 
122
 
 
123
QString TextComponent::getFont()
 
124
{
 
125
    return m_font;
 
126
}
 
127
 
 
128
void TextComponent::setFont( QString font )
 
129
{
 
130
    if( font == "" ) return;
 
131
    m_font = font;
 
132
    
 
133
    QFont Tfont = m_text->font();
 
134
    Tfont.setFamily( font );
 
135
    m_text->setFont( Tfont );
 
136
    updateGeometry( 0, 0, 0 );
 
137
}
 
138
 
 
139
int TextComponent::fontSize()
 
140
{
 
141
    return m_fontSize;
 
142
}
 
143
 
 
144
void TextComponent::setFontSize( int size )
 
145
{
 
146
    if( size < 1 ) return;
 
147
    m_fontSize = size;
 
148
    
 
149
    QFont font = m_text->font();
 
150
    font.setPixelSize( size );
 
151
    m_text->setFont( font );
 
152
    updateGeometry( 0, 0, 0 );
 
153
}
 
154
 
 
155
int  TextComponent::border() { return m_border; }
 
156
void TextComponent::setBorder( int border ) { m_border = border; }
 
157
 
 
158
QString TextComponent::getText() { return m_text->toPlainText(); }
 
159
void    TextComponent::setText( QString text ) { m_text->document()->setPlainText( text ); }
 
160
 
 
161
qreal TextComponent::opac()
 
162
{
 
163
    return m_opac;
 
164
}
 
165
 
 
166
void TextComponent::setOpac( qreal op )
 
167
{
 
168
    m_opac = op;
 
169
    update();
 
170
}
 
171
 
 
172
void TextComponent::mouseDoubleClickEvent( QGraphicsSceneMouseEvent* event )
 
173
{
 
174
    if( event->button() == Qt::LeftButton )
 
175
    {
 
176
        m_text->setTextInteractionFlags( Qt::TextEditorInteraction | Qt::TextBrowserInteraction ); //( Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
 
177
        m_text->setCursor( Qt::IBeamCursor );
 
178
        m_text->setFocus();
 
179
        setSelected( false );
 
180
    }
 
181
}
 
182
 
 
183
bool TextComponent::eventFilter( QObject* object, QEvent* event )
 
184
{
 
185
    if( event->type() == QEvent::FocusIn )
 
186
    {
 
187
        if( object == m_text)
 
188
        {
 
189
            Circuit::self()->deselectAll();
 
190
        }
 
191
    }
 
192
    return false;
 
193
}
 
194
 
 
195
void TextComponent::paint( QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget )
 
196
{
 
197
    if( !m_text->hasFocus() )
 
198
    {
 
199
        m_text->setTextInteractionFlags( 0 );
 
200
        m_text->setCursor( Qt::OpenHandCursor );
 
201
    }
 
202
    p->setOpacity( m_opac );
 
203
 
 
204
    Component::paint( p, option, widget );
 
205
 
 
206
    QPen pen( QColor( 0, 0, 0 ), m_border, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
 
207
    p->setPen( pen );
 
208
 
 
209
    if( m_border >0 ) p->drawRect( m_area );
 
210
    else              p->fillRect( m_area, p->brush() );
 
211
 
 
212
    p->setOpacity( 1 );
 
213
}
 
214
 
 
215
#include "moc_textcomponent.cpp"