##// END OF EJS Templates
GUI almost finished, need work on data managing.
GUI almost finished, need work on data managing.

File last commit:

r4:bd9421acc1c2 default
r4:bd9421acc1c2 default
Show More
registerwidget.h
130 lines | 3.3 KiB | text/x-c | CLexer
#ifndef REGISTERWIDGET_H
#define REGISTERWIDGET_H
#include <QtWidgets>
#include <QWidget>
#include <QTimer>
class regWidgetElement
{
public:
regWidgetElement(const QString& value,QFont font,int xMargin,int yMargin)
{
p_valueStr = value;
p_font = font;
p_xMargins = xMargin;
p_yMargins = yMargin;
updateBoundingRect();
}
void setValue(const QString& value)
{
p_valueStr = value;
updateBoundingRect();
}
void setFont(QFont font)
{
p_font = font;
updateBoundingRect();
}
QSize boundingRect(){return p_boundingRec;}
QString value(){return p_valueStr;}
const QChar at ( int position ) const{return p_valueStr.at(position);}
QFont font(){return p_font;}
int xMargin(){return p_xMargins;}
int yMargin(){return p_yMargins;}
QFontMetrics fontMetrics(){return QFontMetrics(p_font);}
QPoint paint(QPainter* painter)
{
painter->setFont(p_font);
painter->drawText(0,QFontMetrics(p_font).ascent()+p_yMargins,p_valueStr);
return QPoint(p_boundingRec.width(),0);
}
void updateBoundingRect()
{
p_boundingRec.setHeight(QFontMetrics(p_font).boundingRect(p_valueStr).height()+(p_yMargins*2));
p_boundingRec.setWidth(QFontMetrics(p_font).boundingRect(p_valueStr).width()+(p_xMargins*2));
}
protected:
QString p_valueStr;
QFont p_font;
QSize p_boundingRec;
int p_xMargins;
int p_yMargins;
};
class bitfieldsElement: public regWidgetElement
{
class bitFieldAttribute
{
public:
bitFieldAttribute(bool rw,QString description)
{
this->rw = rw;
this->description = description;
}
bool rw;
QString description;
};
public:
bitfieldsElement(const QString& value,QFont font,int xMargin,int yMargin);
QPoint paint(QPainter* painter);
void updateBoundingRect();
void setValue(const QString& value);
void blinkCursor();
void moveCursorLeft(int count);
void moveCursorRight(int count);
void enter(int index);
void leave();
uint cursorIndex();
uint cursorIndex(int xPos);
void setFont(QFont font);
private:
int attributesIndex[32];
uint p_cursorIndex;
bool p_cursorBlinkEnable;
int p_dx;
QList<bitFieldAttribute*> attributesLUT;
QColor p_blinkTextColor,p_blinkTextBgColor;
};
class registerWidget : public QObject
{
Q_OBJECT
public:
explicit registerWidget(const QString& name,qint32 address,QObject *parent = 0);
~registerWidget();
int contains(const QPointF &point);
QPoint paint(QPainter* painter,QPoint offset);
QRect boundingRect();
uint cursorIndex();
uint cursorIndex(int xPos);
signals:
void cursorUp(int pos);
void cursorDown(int pos);
void valueChanged(qint32 value);
void repaint();
public slots:
void setValue(qint32 value);
void blinkCursor();
void moveCursorLeft(int count);
void moveCursorRight(int count);
void enter(int index=0);
void leave();
void clear(int index);
void set(int index);
private:
void updateBoundingRect();
qint32 p_address;
qint32 p_value;
QRect p_boundingRect;
int p_xMargins;
int p_yMargins;
regWidgetElement* p_addressEl,*p_nameEl;
bitfieldsElement* p_fieldsEl;
};
#endif // REGISTERWIDGET_H