#include "CTaenzer.h"
CTaenzer::CTaenzer()
{
m_posXMeter = 0;
m_posYMeter = 0;
m_radius = 10;
m_nummer = 0;
m_width = 70;
m_pxPerMeter = 40;//40
m_flaechenBreite = 14.0;
m_flaechenLaenge = 16.0;
m_showCords = true;
m_name = "T";
m_color = Qt::blue;
m_raster=100;
m_byteNumberName = 1;
m_animation = new QPropertyAnimation(this,"pos");
QGraphicsItem::setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsFocusable);
}
CTaenzer::~CTaenzer()
{
}
void CTaenzer::paint(QPainter *f_painter, const QStyleOptionGraphicsItem *, QWidget *)
{
f_painter->setRenderHint(QPainter::Antialiasing);
QPen *l_pen = new QPen(); // creates a default pen
l_pen->setStyle(Qt::SolidLine);
l_pen->setWidth(1);
QBrush *brush;
if (isSelected())
{
brush = new QBrush(Qt::red);
}
else
{
brush = new QBrush(m_color);
}
l_pen->setBrush(*brush);
l_pen->setCapStyle(Qt::RoundCap);
l_pen->setJoinStyle(Qt::RoundJoin);
QString buffer;
f_painter->setPen(*l_pen);
// speichern der Meter
m_posXMeter = (pos().x()-m_width/2)/m_pxPerMeter-m_flaechenBreite/2.0;
m_posYMeter = (pos().y()-m_width/2)/m_pxPerMeter-m_flaechenLaenge/2.0;
if (isSelected() || m_showCords)
{
// Koordinaten
// Breite x
f_painter->setBackgroundMode(Qt::OpaqueMode);
f_painter->setBackground(Qt::white);
buffer = QString("%1").arg(qAbs(m_posXMeter),0,'D',2);
f_painter->drawText(-m_width/2-m_radius/2-25,-m_width/2-m_radius/2+30,buffer);
// Tiefe y
f_painter->setBackgroundMode(Qt::OpaqueMode);
f_painter->setBackground(Qt::white);
buffer = QString("%1").arg(qAbs(m_posYMeter),0,'D',2);
f_painter->drawText(-m_width/2-m_radius/2+6,-m_width/2-m_radius/2+30,buffer);
}
if (isSelected())
{
f_painter->drawRect(boundingRect());
}
// Kreis
f_painter->drawEllipse(-m_width/2-m_radius/2,-m_width/2-m_radius/2,m_radius,m_radius);
// Nummer oder Name
int l_nummer=0;
if(m_nummer>8)
{
l_nummer=m_nummer-8;
}
else
{
l_nummer=m_nummer;
}
switch (m_byteNumberName)
{
case 0:
buffer=""; // not used
break;
case 1:
buffer = m_name;
break;
case 2:
buffer = QString("%1").arg(l_nummer);
break;
case 3:
buffer = QString("%1_%2").arg(l_nummer).arg(m_name); // not used
break;
default:
break;
}
f_painter->setBackgroundMode(Qt::OpaqueMode);
f_painter->setBackground(Qt::white);
f_painter->drawText(-m_width/2-15,-m_width/2-19,30,12,Qt::AlignCenter,buffer);
//m_animation->setStartValue(this->pos());
}
QRectF CTaenzer::boundingRect() const
{
return QRectF( -m_width, -m_width, m_width, m_width);
}
void CTaenzer::keyPressEvent ( QKeyEvent * f_event )
{
if (isSelected())
{
if (f_event->key()==Qt::Key_Up)
{
setPos(pos().x(),pos().y()-m_pxPerMeter/m_raster);
m_posBuffer = pos();
}
if (f_event->key()==Qt::Key_Down)
{
setPos(pos().x(),pos().y()+m_pxPerMeter/m_raster);
m_posBuffer = pos();
}
if (f_event->key()==Qt::Key_Left)
{
setPos(pos().x()-m_pxPerMeter/m_raster,pos().y());
m_posBuffer = pos();
}
if (f_event->key()==Qt::Key_Right)
{
setPos(pos().x()+m_pxPerMeter/m_raster,pos().y());
m_posBuffer = pos();
}
qreal x = qRound((pos().x()-m_width/2) / m_pxPerMeter *m_raster);
qreal y = qRound((pos().y()-m_width/2) / m_pxPerMeter *m_raster);
x=x*m_pxPerMeter/m_raster +m_width/2;
y=y*m_pxPerMeter/m_raster +m_width/2;
setPos(x,y);
m_posBuffer = pos();
}
}
void CTaenzer::switchNumberName()
{
m_byteNumberName++;
if(m_byteNumberName>=3) m_byteNumberName=1; // 3 and 0 not used yet !
update(this->boundingRect());
}
void CTaenzer::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
QGraphicsItem::mouseMoveEvent ( event ) ;
m_posBuffer = pos();
qreal x = qRound((pos().x()-m_width/2) / m_pxPerMeter *m_raster);
qreal y = qRound((pos().y()-m_width/2) / m_pxPerMeter *m_raster);
x=x*m_pxPerMeter/m_raster +m_width/2;
y=y*m_pxPerMeter/m_raster +m_width/2;
setPos(x,y);
m_posBuffer = pos();
}
void CTaenzer::setAni (QPointF startPos, QPointF endPos, qint32 duration )
{
m_animation->setStartValue(startPos);
m_animation->setEndValue(endPos);
m_animation->setDuration(duration);
m_animation->start();
}
void CTaenzer::setPos2( QPointF f_point)
{
setPos(f_point);
m_posBuffer = f_point;
}
void CTaenzer::setPos2( qreal f_x, qreal f_y)
{
setPos(f_x,f_y);
m_posBuffer = QPointF(f_x,f_y);
}
QPointF CTaenzer::getPosMeter()
{
return QPointF(m_posXMeter,m_posYMeter);
}
void CTaenzer::setPosMeter(QPointF f_posMeter)
{
m_posXMeter = f_posMeter.x();
m_posYMeter = f_posMeter.y();
}