##// END OF EJS Templates
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
Cleaned path to use as hg submodule of lppmon_sdk or any other project.

File last commit:

r5:4e6b18a64911 default
r5:4e6b18a64911 default
Show More
peripheralwidget.cpp
167 lines | 4.8 KiB | text/x-c | CppLexer
/ src / peripheralwidget.cpp
#include "peripheralwidget.h"
peripheralWidget::peripheralWidget(const QString &name, qint32 baseAddress, QWidget *parent) :
QWidget(parent)
{
p_name = name;
p_timer = new QTimer(this);
p_timer->setInterval(500);
p_baseAddress = baseAddress;
p_header = p_name + QString(" @0x%1").arg((uint)p_baseAddress,8,16);
setAttribute(Qt::WA_AlwaysShowToolTips);
setMouseTracking(true);
setFocusPolicy(Qt::StrongFocus);
selectedReg = -1;
registersWdgts.clear();
connect(p_timer,SIGNAL(timeout()),this,SLOT(blinkCursor()));
setFont(QFont("Utopia", 14,QFont::Bold));
}
void peripheralWidget::blinkCursor()
{
if(selectedReg!=-1)
registersWdgts.at(selectedReg)->blinkCursor();
repaint();
}
void peripheralWidget::addRegister(const QString &name, qint32 address)
{
/*TODO Should regs by address*/
registersWdgts.append(new registerWidget(name,address));
connect(registersWdgts.last(),SIGNAL(repaint()),this,SLOT(repaint()));
}
void peripheralWidget::mousePressEvent(QMouseEvent *event)
{
p_timer->stop();
if(selectedReg!=-1)
{
registersWdgts.at(selectedReg)->leave();
selectedReg = -1;
}
for(int i=0; i<registersWdgts.count();i++)
{
if(registersWdgts.at(i)->contains(event->pos()))
{
registersWdgts.at(i)->enter(registersWdgts.at(i)->cursorIndex(event->pos().x()));
selectedReg = i;
p_timer->start();
}
}
repaint();
}
void peripheralWidget::mouseMoveEvent(QMouseEvent *event)
{
}
void peripheralWidget::mouseReleaseEvent(QMouseEvent *event)
{
}
void peripheralWidget::keyPressEvent(QKeyEvent *event)
{
if(this->selectedReg!=-1){
if(event->modifiers()==Qt::ControlModifier)
{
switch(event->key())
{
case Qt::Key_Up:
registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
break;
case Qt::Key_Down:
registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
break;
case Qt::Key_W:
emit writeRegSig(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value());
break;
case Qt::Key_R:
qint32 value;
value = emit readRegSig(registersWdgts.at(selectedReg)->address());
break;
default:
break;
}
}
else
{
switch(event->key())
{
case Qt::Key_0:
registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
registersWdgts.at(selectedReg)->moveCursorRight(1);
break;
case Qt::Key_1:
registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
registersWdgts.at(selectedReg)->moveCursorRight(1);
break;
case Qt::Key_Right:
registersWdgts.at(selectedReg)->moveCursorRight(1);
this->repaint();
break;
case Qt::Key_Left:
registersWdgts.at(selectedReg)->moveCursorLeft(1);
this->repaint();
break;
case Qt::Key_Up:
up();
break;
case Qt::Key_Down:
down();
break;
default:
break;
}
}
}
}
void peripheralWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
QPoint offset=QPoint(0,0);
int nameWidth = fontMetrics().width(p_header);
if(registersWdgts.count()==0)
{
setMinimumSize(2*nameWidth+10,fontMetrics().height()+10);
}
painter.drawText((this->minimumWidth()/2)-nameWidth,4,fontMetrics().width(p_header),fontMetrics().height()+4,Qt::AlignCenter,p_header);
offset+=QPoint(0,fontMetrics().height()+8);
for(int i=0;i<registersWdgts.count();i++)
{
offset = registersWdgts.at(i)->paint(&painter,offset);
}
if(registersWdgts.count()>0)
{
setMinimumSize(registersWdgts.first()->boundingRect().width(),offset.y());
}
updateGeometry();
}
void peripheralWidget::up()
{
if(selectedReg!=-1 && selectedReg >0)
{
registersWdgts.at(selectedReg)->leave();
selectedReg-=1;
registersWdgts.at(selectedReg)->enter(registersWdgts.at(selectedReg+1)->cursorIndex());
repaint();
}
}
void peripheralWidget::down()
{
if(selectedReg!=-1 && selectedReg <(registersWdgts.count()-1))
{
registersWdgts.at(selectedReg)->leave();
selectedReg+=1;
registersWdgts.at(selectedReg)->enter(registersWdgts.at(selectedReg-1)->cursorIndex());
repaint();
}
}