@@ -0,0 +1,9 | |||
|
1 | ||
|
2 | PERIPHERAL_WDGT_SOURCES =\ | |
|
3 | src/peripheralwidget.cpp \ | |
|
4 | src/registerwidget.cpp | |
|
5 | ||
|
6 | PERIPHERAL_WDGT_HEADERS += \ | |
|
7 | src/peripheralwidget.h \ | |
|
8 | src/registerwidget.h | |
|
9 |
@@ -10,13 +10,18 greaterThan(QT_MAJOR_VERSION, 4): QT += | |||
|
10 | 10 | |
|
11 | 11 | TARGET = PeripheralWidget |
|
12 | 12 | TEMPLATE = app |
|
13 | MOC_DIR = moc | |
|
14 | OBJECTS_DIR = obj | |
|
15 | DESTDIR = bin | |
|
13 | 16 | |
|
17 | include(PeripheralWidget.pri) | |
|
18 | ||
|
19 | INCLUDEPATH += src | |
|
14 | 20 | |
|
15 | SOURCES += main.cpp\ | |
|
16 | mainwindow.cpp \ | |
|
17 | peripheralwidget.cpp \ | |
|
18 | registerwidget.cpp | |
|
21 | SOURCES += test/main.cpp \ | |
|
22 | test/mainwindow.cpp \ | |
|
23 | $$PERIPHERAL_WDGT_SOURCES | |
|
19 | 24 | |
|
20 | HEADERS += mainwindow.h \ | |
|
21 | peripheralwidget.h \ | |
|
22 | registerwidget.h | |
|
25 | HEADERS += test/mainwindow.h \ | |
|
26 | $$PERIPHERAL_WDGT_HEADERS | |
|
27 |
@@ -1,21 +1,18 | |||
|
1 | 1 | #include "peripheralwidget.h" |
|
2 | 2 | |
|
3 | peripheralWidget::peripheralWidget(const QString &name, QWidget *parent) : | |
|
3 | peripheralWidget::peripheralWidget(const QString &name, qint32 baseAddress, QWidget *parent) : | |
|
4 | 4 | QWidget(parent) |
|
5 | 5 | { |
|
6 | 6 | p_name = name; |
|
7 | 7 | p_timer = new QTimer(this); |
|
8 | 8 | p_timer->setInterval(500); |
|
9 | for(int i=0;i<10;i++) | |
|
10 | { | |
|
11 | registersWdgts.append(new registerWidget(QString("REG%1").arg(i),i*4)); | |
|
12 | registersWdgts.at(i)->setValue((i<<24)+(i<<8)+i); | |
|
13 | connect(registersWdgts.at(i),SIGNAL(repaint()),this,SLOT(repaint())); | |
|
14 | } | |
|
9 | p_baseAddress = baseAddress; | |
|
10 | p_header = p_name + QString(" @0x%1").arg((uint)p_baseAddress,8,16); | |
|
15 | 11 | setAttribute(Qt::WA_AlwaysShowToolTips); |
|
16 | 12 | setMouseTracking(true); |
|
17 | 13 | setFocusPolicy(Qt::StrongFocus); |
|
18 | 14 | selectedReg = -1; |
|
15 | registersWdgts.clear(); | |
|
19 | 16 | connect(p_timer,SIGNAL(timeout()),this,SLOT(blinkCursor())); |
|
20 | 17 | setFont(QFont("Utopia", 14,QFont::Bold)); |
|
21 | 18 | } |
@@ -27,11 +24,21 void peripheralWidget::blinkCursor() | |||
|
27 | 24 | repaint(); |
|
28 | 25 | } |
|
29 | 26 | |
|
27 | void peripheralWidget::addRegister(const QString &name, qint32 address) | |
|
28 | { | |
|
29 | /*TODO Should regs by address*/ | |
|
30 | registersWdgts.append(new registerWidget(name,address)); | |
|
31 | connect(registersWdgts.last(),SIGNAL(repaint()),this,SLOT(repaint())); | |
|
32 | } | |
|
33 | ||
|
30 | 34 | void peripheralWidget::mousePressEvent(QMouseEvent *event) |
|
31 | 35 | { |
|
32 | 36 | p_timer->stop(); |
|
33 | 37 | if(selectedReg!=-1) |
|
38 | { | |
|
34 | 39 | registersWdgts.at(selectedReg)->leave(); |
|
40 | selectedReg = -1; | |
|
41 | } | |
|
35 | 42 | for(int i=0; i<registersWdgts.count();i++) |
|
36 | 43 | { |
|
37 | 44 | if(registersWdgts.at(i)->contains(event->pos())) |
@@ -67,6 +74,13 void peripheralWidget::keyPressEvent(QKe | |||
|
67 | 74 | case Qt::Key_Down: |
|
68 | 75 | registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex()); |
|
69 | 76 | break; |
|
77 | case Qt::Key_W: | |
|
78 | emit writeRegSig(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value()); | |
|
79 | break; | |
|
80 | case Qt::Key_R: | |
|
81 | qint32 value; | |
|
82 | value = emit readRegSig(registersWdgts.at(selectedReg)->address()); | |
|
83 | break; | |
|
70 | 84 | default: |
|
71 | 85 | break; |
|
72 | 86 | } |
@@ -108,17 +122,26 void peripheralWidget::keyPressEvent(QKe | |||
|
108 | 122 | void peripheralWidget::paintEvent(QPaintEvent *event) |
|
109 | 123 | { |
|
110 | 124 | Q_UNUSED(event) |
|
125 | ||
|
111 | 126 | QPainter painter(this); |
|
112 | 127 | QPoint offset=QPoint(0,0); |
|
113 |
int nameWidth = fontMetrics().width(p_ |
|
|
114 | painter.drawText((this->minimumWidth()/2)-nameWidth,4,fontMetrics().width(p_name),fontMetrics().height()+4,Qt::AlignCenter,p_name); | |
|
128 | int nameWidth = fontMetrics().width(p_header); | |
|
129 | if(registersWdgts.count()==0) | |
|
130 | { | |
|
131 | setMinimumSize(2*nameWidth+10,fontMetrics().height()+10); | |
|
132 | } | |
|
133 | painter.drawText((this->minimumWidth()/2)-nameWidth,4,fontMetrics().width(p_header),fontMetrics().height()+4,Qt::AlignCenter,p_header); | |
|
115 | 134 | offset+=QPoint(0,fontMetrics().height()+8); |
|
116 | 135 | for(int i=0;i<registersWdgts.count();i++) |
|
117 | 136 | { |
|
118 | 137 | offset = registersWdgts.at(i)->paint(&painter,offset); |
|
119 | 138 | } |
|
120 | setMinimumSize(registersWdgts.first()->boundingRect().width(),offset.y()); | |
|
139 | if(registersWdgts.count()>0) | |
|
140 | { | |
|
141 | setMinimumSize(registersWdgts.first()->boundingRect().width(),offset.y()); | |
|
142 | } | |
|
121 | 143 | updateGeometry(); |
|
144 | ||
|
122 | 145 | } |
|
123 | 146 | |
|
124 | 147 | void peripheralWidget::up() |
@@ -12,12 +12,14 class peripheralWidget : public QWidget | |||
|
12 | 12 | { |
|
13 | 13 | Q_OBJECT |
|
14 | 14 | public: |
|
15 | explicit peripheralWidget(const QString& name, QWidget *parent = 0); | |
|
15 | explicit peripheralWidget(const QString& name,qint32 baseAddress, QWidget *parent = 0); | |
|
16 | 16 | |
|
17 | 17 | signals: |
|
18 | ||
|
18 | void writeRegSig(qint32 address,qint32 value); | |
|
19 | qint32 readRegSig(qint32 address); | |
|
19 | 20 | public slots: |
|
20 | 21 | void blinkCursor(); |
|
22 | void addRegister(const QString& name,qint32 address); | |
|
21 | 23 | protected: |
|
22 | 24 | void mousePressEvent(QMouseEvent *event); |
|
23 | 25 | void mouseMoveEvent(QMouseEvent *event); |
@@ -29,6 +31,8 private: | |||
|
29 | 31 | void up(); |
|
30 | 32 | void down(); |
|
31 | 33 | QString p_name; |
|
34 | QString p_header; | |
|
35 | qint32 p_baseAddress; | |
|
32 | 36 | QList<registerWidget*> registersWdgts; |
|
33 | 37 | int selectedReg; |
|
34 | 38 | QTimer* p_timer; |
@@ -59,6 +59,16 uint registerWidget::cursorIndex(int xPo | |||
|
59 | 59 | } |
|
60 | 60 | } |
|
61 | 61 | |
|
62 | qint32 registerWidget::address() | |
|
63 | { | |
|
64 | return p_address; | |
|
65 | } | |
|
66 | ||
|
67 | qint32 registerWidget::value() | |
|
68 | { | |
|
69 | return p_value; | |
|
70 | } | |
|
71 | ||
|
62 | 72 | void registerWidget::setValue(qint32 value) |
|
63 | 73 | { |
|
64 | 74 | this->p_value = value; |
@@ -101,6 +101,8 public: | |||
|
101 | 101 | QRect boundingRect(); |
|
102 | 102 | uint cursorIndex(); |
|
103 | 103 | uint cursorIndex(int xPos); |
|
104 | qint32 address(); | |
|
105 | qint32 value(); | |
|
104 | 106 | signals: |
|
105 | 107 | void cursorUp(int pos); |
|
106 | 108 | void cursorDown(int pos); |
|
1 | NO CONTENT: file renamed from main.cpp to test/main.cpp |
@@ -3,7 +3,11 | |||
|
3 | 3 | MainWindow::MainWindow(QWidget *parent) |
|
4 | 4 | : QMainWindow(parent) |
|
5 | 5 | { |
|
6 | this->setCentralWidget(new peripheralWidget("UART1",this)); | |
|
6 | qint32 baseAddress = 0x8000100; | |
|
7 | testWidget = new peripheralWidget("UART1",baseAddress,this); | |
|
8 | for(int i=0;i<10;i++) | |
|
9 | testWidget->addRegister(QString("REG%1").arg((uint)i),baseAddress+(i*4)); | |
|
10 | this->setCentralWidget(testWidget); | |
|
7 | 11 | } |
|
8 | 12 | |
|
9 | 13 | MainWindow::~MainWindow() |
General Comments 0
You need to be logged in to leave comments.
Login now