##// END OF EJS Templates
removed warnings
removed warnings

File last commit:

r12:11eb22bf1e6f default
r13:8ee59f35313b default
Show More
registerwidget.h
226 lines | 6.2 KiB | text/x-c | CLexer
/ src / registerwidget.h
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 #ifndef REGISTERWIDGET_H
#define REGISTERWIDGET_H
#include <QtWidgets>
#include <QWidget>
#include <QTimer>
Alexis Jeandet
Fixed Win32 build
r12 #if defined(LPPMON_SDK_BUILD)
# define LPPMON_SDK_EXPORT Q_DECL_EXPORT
#else
# define LPPMON_SDK_EXPORT Q_DECL_IMPORT
#endif
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5
Alexis Jeandet
Fixed Win32 build
r12 class LPPMON_SDK_EXPORT regWidgetElement
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 {
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;
};
Alexis Jeandet
Fixed Win32 build
r12 class LPPMON_SDK_EXPORT bitfieldsElement: public regWidgetElement
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 {
class bitFieldAttribute
{
public:
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 bitFieldAttribute(bool rw,QString name,QString description)
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 {
this->rw = rw;
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 this->Name = name;
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 this->description = description;
}
bool rw;
QString description;
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 QString Name;
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 };
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);
improved register GUI....
r9 void updateSelection(int index);
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 int addAttribute(const QString& name,const QString& description,bool rw)
Jeandet Alexis
Sync
r7 {
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 attributesLUT.append(new bitFieldAttribute(rw,name,description));
Jeandet Alexis
Sync
r7 return attributesLUT.count()-1;
}
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11
Jeandet Alexis
Sync
r7 int setAttribute(int bitIndex,int attributeIndex)
{
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 if(bitIndex>=0 && bitIndex<32 && attributeIndex>=0 && attributeIndex<(attributesLUT.count()))
{
attributesIndex[bitIndex]=attributeIndex;
return 0;
}
return -1;
Jeandet Alexis
Sync
r7 }
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11
Jeandet Alexis
Sync
r7 QString description(int bitIndex)
{
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 if(bitIndex>=0 && bitIndex<32)
return attributesLUT.at(attributesIndex[bitIndex])->description;
return QString("");
}
QString name(int bitIndex)
{
if(bitIndex>=0 && bitIndex<32)
return attributesLUT.at(attributesIndex[bitIndex])->Name;
return QString("");
Jeandet Alexis
Sync
r7 }
bool readonly(int bitIndex)
{
if(bitIndex>=0 && bitIndex<32)
return !attributesLUT.at(attributesIndex[bitIndex])->rw;
return false;
}
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 QString valueHex(int index)
{
if(index>=0 && index<32)
{
return "0x" + QString::number(p_valueUint(index),16);
}
return QString("");
}
QString valueDec(int index)
{
if(index>=0 && index<32)
{
return QString::number(p_valueUint(index),10);
}
return QString("");
}
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 private:
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 uint p_valueUint(int index)
{
uint value;
int attributeIndex = attributesIndex[index];
int startIndex = index;
int stopIndex=0;
while (startIndex>0)
{
if(attributesIndex[startIndex-1]==attributeIndex)
startIndex--;
else
break;
}
stopIndex = startIndex;
while (stopIndex<32)
{
if(attributesIndex[stopIndex+1]==attributeIndex)
stopIndex++;
else
break;
}
bool ok;
value = p_valueStr.toUInt(&ok,2);
value = (uint)0xFFFFFFFF & (value<<(31-stopIndex));
value = (uint)0xFFFFFFFF & (value>>(31-stopIndex+startIndex));
return value;
}
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 int attributesIndex[32];
uint p_cursorIndex;
improved register GUI....
r9 uint p_startSelectionIndex;
uint p_stopSelectionIndex;
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 bool p_cursorBlinkEnable;
int p_dx;
QList<bitFieldAttribute*> attributesLUT;
QColor p_blinkTextColor,p_blinkTextBgColor;
};
Alexis Jeandet
Fixed Win32 build
r12 class LPPMON_SDK_EXPORT registerWidget : public QObject
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 {
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);
improved register GUI....
r9 void updateSelection(int index);
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 qint32 address();
qint32 value();
Jeandet Alexis
Improved bitfield tooltip, improved register navigation with keyboard.
r11 void setBitFieldAttribute(uint startIndex,uint stopIndex,const QString& name,const QString& description,bool rw);
QString bitFieldDesc(int bitIndex);
QString bitFieldName(int bitIndex);
QString bitFieldToHex(int bitIndex);
QString bitFieldToDec(int bitIndex);
QString bitFieldToBin(int bitIndex);
Jeandet Alexis
Cleaned path to use as hg submodule of lppmon_sdk or any other project.
r5 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