##// END OF EJS Templates
Added new peripheral view.
jeandet -
r18:9790824220ca default
parent child
Show More
@@ -0,0 +1,25
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!-- Created with Inkscape (http://www.inkscape.org/) -->
3 <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg4289" sodipodi:version="0.32" inkscape:version="0.45" version="1.0" sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/actions" sodipodi:docname="list-add.svg" inkscape:export-filename="/home/andreas/project/gnome-icon-theme/scalable/actions/list-add.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:output_extension="org.inkscape.output.svg.inkscape">
4 <defs id="defs4291">
5 <linearGradient inkscape:collect="always" id="linearGradient4622">
6 <stop style="stop-color:#b4b5b3;stop-opacity:1" offset="0" id="stop4624"/>
7 <stop style="stop-color:#d8d9d7;stop-opacity:1" offset="1" id="stop4626"/>
8 </linearGradient>
9 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4622" id="linearGradient4320" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.810197,0,0,2.747234,1.562312,1.675085)" x1="8.6790628" y1="6.7354665" x2="8.7223368" y2="10.858153"/>
10 </defs>
11 <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="16" inkscape:cx="28.380765" inkscape:cy="26.638236" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" width="48px" height="48px" showguides="true" inkscape:guide-bbox="true" inkscape:window-width="1673" inkscape:window-height="968" inkscape:window-x="1" inkscape:window-y="27"/>
12 <metadata id="metadata4294">
13 <rdf:RDF>
14 <cc:Work rdf:about="">
15 <dc:format>image/svg+xml</dc:format>
16 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
17 </cc:Work>
18 </rdf:RDF>
19 </metadata>
20 <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
21 <path style="opacity:1;fill:url(#linearGradient4320);fill-opacity:1;stroke:#555753;stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 8.4999995,21.548779 L 8.4999995,26.514266 L 21.542175,26.514266 L 21.542175,38.455753 L 26.527841,38.500024 L 26.499007,26.514266 L 39.499998,26.469995 L 39.499998,21.548779 L 26.478909,21.548779 L 26.482175,8.542935 L 21.498141,8.5000092 L 21.496508,21.55147 L 8.4999995,21.548779 z " id="path4314" sodipodi:nodetypes="ccccccccccccc"/>
22 <path style="opacity:0.2;fill:white;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" d="M 9,22.072045 L 22.070199,22.072045 L 22.065556,9 L 26.002778,9.1688851 L 25.957932,22.156486 L 38.906989,22.072045 L 38.906989,24.048454 L 9,24.048454 L 9,22.072045 z " id="path4316" sodipodi:nodetypes="ccccccccc"/>
23 <path style="opacity:0.4;fill:none;fill-opacity:1;stroke:white;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 9.5000012,22.518518 L 9.5000012,25.561981 L 22.540436,25.561981 L 22.540436,37.458666 L 25.525069,37.499986 L 25.498095,25.561981 L 38.500003,25.520661 L 38.500003,22.518518 L 25.567682,22.518518 L 25.570737,9.540046 L 22.499243,9.499982 L 22.497715,22.52103 L 9.5000012,22.518518 z " id="path5202" sodipodi:nodetypes="ccccccccccccc"/>
24 </g>
25 </svg> No newline at end of file
@@ -0,0 +1,48
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!-- Created with Inkscape (http://www.inkscape.org/) -->
3 <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg4289" sodipodi:version="0.32" inkscape:version="0.45" version="1.0" sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/actions" sodipodi:docname="list-remove.svg" inkscape:export-filename="/home/andreas/project/gnome-icon-theme/22x22/actions/list-add.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:output_extension="org.inkscape.output.svg.inkscape">
4 <defs id="defs4291">
5 <linearGradient inkscape:collect="always" id="linearGradient4622">
6 <stop style="stop-color:#b4b5b3;stop-opacity:1" offset="0" id="stop4624"/>
7 <stop style="stop-color:#d8d9d7;stop-opacity:1" offset="1" id="stop4626"/>
8 </linearGradient>
9 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4622" id="linearGradient4320" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.810197,0,0,2.747234,1.562312,1.675085)" x1="8.6790628" y1="6.7354665" x2="8.7223368" y2="10.858153"/>
10 </defs>
11 <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="16" inkscape:cx="28.380765" inkscape:cy="26.606986" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" width="48px" height="48px" showguides="true" inkscape:guide-bbox="true" inkscape:window-width="1673" inkscape:window-height="968" inkscape:window-x="1" inkscape:window-y="27"/>
12 <metadata id="metadata4294">
13 <rdf:RDF>
14 <cc:Work rdf:about="">
15 <dc:format>image/svg+xml</dc:format>
16 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
17 <cc:license rdf:resource="http://creativecommons.org/licenses/GPL/2.0/"/>
18 <dc:title>List remove</dc:title>
19 <dc:date>August 2006</dc:date>
20 <dc:creator>
21 <cc:Agent>
22 <dc:title>Andreas Nilsson</dc:title>
23 </cc:Agent>
24 </dc:creator>
25 <dc:source>http://www.gnome.org</dc:source>
26 <dc:subject>
27 <rdf:Bag>
28 <rdf:li>remove</rdf:li>
29 <rdf:li>minus</rdf:li>
30 </rdf:Bag>
31 </dc:subject>
32 </cc:Work>
33 <cc:License rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
34 <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
35 <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
36 <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
37 <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
38 <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
39 <cc:requires rdf:resource="http://web.resource.org/cc/SourceCode"/>
40 </cc:License>
41 </rdf:RDF>
42 </metadata>
43 <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
44 <path style="opacity:1;fill:url(#linearGradient4320);fill-opacity:1;stroke:#555753;stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 8.4999995,21.548779 L 8.4999995,26.514266 L 39.499998,26.469995 L 39.499998,21.548779 L 8.4999995,21.548779 z " id="path4314" sodipodi:nodetypes="ccccc"/>
45 <path style="opacity:0.2;fill:white;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" d="M 9,22.072045 L 38.906989,22.072045 L 38.906989,24.048454 L 9,24.048454 L 9,22.072045 z " id="path4316" sodipodi:nodetypes="ccccc"/>
46 <path style="opacity:0.4;fill:none;fill-opacity:1;stroke:white;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 9.5000012,22.518518 L 9.5000012,25.561981 L 38.500003,25.520661 L 38.500003,22.518518 L 9.5000012,22.518518 z " id="path5202" sodipodi:nodetypes="ccccc"/>
47 </g>
48 </svg> No newline at end of file
@@ -0,0 +1,6
1 <RCC>
2 <qresource prefix="/img">
3 <file>Gnome-list-add.svg</file>
4 <file>Gnome-list-remove.svg</file>
5 </qresource>
6 </RCC>
@@ -0,0 +1,102
1 #include "collapsableperipheralwidget.h"
2 #include "ui_collapsableperipheralwidget.h"
3 #include <QCursor>
4
5
6 CollapsablePeripheralWidget::CollapsablePeripheralWidget(peripheralWidget *periph, QWidget *parent) :
7 QWidget(parent),
8 ui(new Ui::CollapsablePeripheralWidget)
9 {
10 m_periph=0;
11 m_collapsed = true;
12 ui->setupUi(this);
13 tthidetmr.setSingleShot(true);
14 tthidetmr.setInterval(200);
15 connect(this->ui->collapseQpb,SIGNAL(clicked()),this,SLOT(collapse()));
16 connect(this->ui->periphName,SIGNAL(clicked()),this,SLOT(collapse()));
17 connect(this->ui->periphName,SIGNAL(enter()),this,SLOT(showTooltip()));
18 connect(this->ui->periphName,SIGNAL(leave()),&this->tthidetmr,SLOT(start()));
19 connect(&this->tthidetmr,SIGNAL(timeout()),this,SLOT(hideTooltip()));
20 setPeripheralWidget(periph);
21 }
22
23 CollapsablePeripheralWidget::~CollapsablePeripheralWidget()
24 {
25 delete ui;
26 }
27
28 void CollapsablePeripheralWidget::setPeripheralWidget(peripheralWidget *periph)
29 {
30 if(periph)
31 {
32 this->m_periph = periph;
33 this->ui->gridLayout->addWidget(periph,1,0,1,-1);
34 this->ui->periphName->setText(periph->name());
35 this->m_periph->setVisible(false);
36 }
37 }
38
39 peripheralWidget *CollapsablePeripheralWidget::getPeripheralWidget()
40 {
41 return m_periph;
42 }
43
44 void CollapsablePeripheralWidget::changeEvent(QEvent *e)
45 {
46 QWidget::changeEvent(e);
47 switch (e->type()) {
48 case QEvent::LanguageChange:
49 ui->retranslateUi(this);
50 break;
51 default:
52 break;
53 }
54 }
55
56 void CollapsablePeripheralWidget::collapse()
57 {
58 this->m_periph->setVisible(m_collapsed);
59 if(this->m_collapsed)
60 {
61 this->ui->collapseQpb->setIcon(QIcon(":/img/Gnome-list-remove.svg"));
62 }
63 else
64 {
65 this->ui->collapseQpb->setIcon(QIcon(":/img/Gnome-list-add.svg"));
66 }
67 m_collapsed = !m_collapsed;
68 }
69
70 void CollapsablePeripheralWidget::setName(const QString &name)
71 {
72 if(m_periph)
73 {
74 this->ui->periphName->setText(name);
75 }
76 }
77
78 void CollapsablePeripheralWidget::showTooltip()
79 {
80 if(!m_periph->isVisible() && m_collapsed)
81 {
82 m_periph->show();
83 }
84 }
85
86 void CollapsablePeripheralWidget::hideTooltip()
87 {
88 if(m_periph->isVisible() && m_collapsed)
89 {
90 QRect temprect = this->geometry();
91 temprect.moveTo(this->mapToGlobal(mapFromParent(QPoint(this->x(),this->y()))));
92 if(temprect.contains(QCursor::pos()))
93 {
94 this->tthidetmr.start();
95 }
96 else
97 {
98 m_periph->hide();
99 }
100 }
101 }
102
@@ -0,0 +1,56
1 #ifndef COLLAPSABLEPERIPHERALWIDGET_H
2 #define COLLAPSABLEPERIPHERALWIDGET_H
3
4 #include <QWidget>
5 #include <peripheralwidget.h>
6 #include <QTimer>
7
8 namespace Ui {
9 class CollapsablePeripheralWidget;
10 }
11
12 class QRegToolTipLabel : public QLabel
13 {
14 Q_OBJECT
15 public:
16 QRegToolTipLabel(QWidget * parent = 0, Qt::WindowFlags f = 0):QLabel(parent,f){}
17 QRegToolTipLabel(const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0):QLabel(text,parent,f){}
18 signals:
19 void enter();
20 void leave();
21 void clicked();
22 protected:
23 void enterEvent(QEvent* event){emit enter();QLabel::enterEvent(event);}
24 void leaveEvent(QEvent* event){emit leave();QLabel::leaveEvent(event);}
25 void mousePressEvent(QMouseEvent * event){emit clicked();QLabel::mousePressEvent(event);}
26 };
27
28 class CollapsablePeripheralWidget : public QWidget
29 {
30 Q_OBJECT
31
32 public:
33 explicit CollapsablePeripheralWidget(peripheralWidget* periph,QWidget *parent = 0);
34 ~CollapsablePeripheralWidget();
35 void setPeripheralWidget(peripheralWidget* periph);
36 peripheralWidget* getPeripheralWidget();
37 protected:
38 void changeEvent(QEvent *e);
39
40 public slots:
41 void collapse();
42 void setName(const QString& name);
43 void showTooltip();
44 void hideTooltip();
45 signals:
46 void clicked(peripheralWidget* sender);
47 void upSig(peripheralWidget* sender,int cursorIndex);
48 void downSig(peripheralWidget* sender,int cursorIndex);
49 private:
50 Ui::CollapsablePeripheralWidget *ui;
51 peripheralWidget* m_periph;
52 bool m_collapsed;
53 QTimer tthidetmr;
54 };
55
56 #endif // COLLAPSABLEPERIPHERALWIDGET_H
@@ -0,0 +1,89
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
3 <class>CollapsablePeripheralWidget</class>
4 <widget class="QWidget" name="CollapsablePeripheralWidget">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>845</width>
10 <height>249</height>
11 </rect>
12 </property>
13 <property name="sizePolicy">
14 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
15 <horstretch>0</horstretch>
16 <verstretch>0</verstretch>
17 </sizepolicy>
18 </property>
19 <property name="windowTitle">
20 <string>Form</string>
21 </property>
22 <property name="styleSheet">
23 <string notr="true">QWidget#CollapsablePeripheralWidget {
24 border: 1px solid gray;
25 border-radius: 9px;
26 }</string>
27 </property>
28 <layout class="QGridLayout" name="gridLayout">
29 <item row="0" column="2">
30 <widget class="QPushButton" name="collapseQpb">
31 <property name="sizePolicy">
32 <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
33 <horstretch>0</horstretch>
34 <verstretch>0</verstretch>
35 </sizepolicy>
36 </property>
37 <property name="text">
38 <string/>
39 </property>
40 <property name="icon">
41 <iconset resource="../ressources/peripheralwidget.qrc">
42 <normaloff>:/img/Gnome-list-add.svg</normaloff>
43 <normalon>:/img/Gnome-list-remove.svg</normalon>:/img/Gnome-list-add.svg</iconset>
44 </property>
45 <property name="flat">
46 <bool>true</bool>
47 </property>
48 </widget>
49 </item>
50 <item row="0" column="0">
51 <widget class="QRegToolTipLabel" name="periphName">
52 <property name="sizePolicy">
53 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
54 <horstretch>0</horstretch>
55 <verstretch>0</verstretch>
56 </sizepolicy>
57 </property>
58 <property name="text">
59 <string>PeriphName</string>
60 </property>
61 </widget>
62 </item>
63 <item row="0" column="1">
64 <spacer name="horizontalSpacer">
65 <property name="orientation">
66 <enum>Qt::Horizontal</enum>
67 </property>
68 <property name="sizeHint" stdset="0">
69 <size>
70 <width>40</width>
71 <height>20</height>
72 </size>
73 </property>
74 </spacer>
75 </item>
76 </layout>
77 </widget>
78 <customwidgets>
79 <customwidget>
80 <class>QRegToolTipLabel</class>
81 <extends>QLabel</extends>
82 <header location="global">collapsableperipheralwidget.h</header>
83 </customwidget>
84 </customwidgets>
85 <resources>
86 <include location="../ressources/peripheralwidget.qrc"/>
87 </resources>
88 <connections/>
89 </ui>
@@ -0,0 +1,107
1 #include "socregsviewernew.h"
2 #include "ui_socregsviewernew.h"
3
4 SocRegsViewerNew::SocRegsViewerNew(const QString &name,QWidget *parent) :
5 QWidget(parent),
6 ui(new Ui::SocRegsViewerNew)
7 {
8 ui->setupUi(this);
9 this->ui->socName->setText(name);
10 }
11
12 SocRegsViewerNew::~SocRegsViewerNew()
13 {
14 delete ui;
15 }
16
17 peripheralWidget *SocRegsViewerNew::peripheral(int index)
18 {
19 if(index>=0 && index<p_peripherals.count())
20 {
21 return p_peripherals.at(index);
22 }
23 return NULL;
24 }
25
26 void SocRegsViewerNew::addPeripheral(peripheralWidget *peripheral)
27 {
28 if(peripheral!=NULL)
29 {
30 CollapsablePeripheralWidget* cperiph = new CollapsablePeripheralWidget(peripheral);
31 cperiph->setPeripheralWidget(peripheral);
32 p_peripherals.append(peripheral);
33 p_CPeripherals.append(cperiph);
34 this->ui->scrollAreaWidgetContents->layout()->addWidget(cperiph);
35 connect(cperiph,SIGNAL(clicked(peripheralWidget*)),this,SLOT(periphClicked(peripheralWidget*)));
36 connect(cperiph,SIGNAL(upSig(peripheralWidget*,int)),this,SLOT(periphUp(peripheralWidget*,int)));
37 connect(cperiph,SIGNAL(downSig(peripheralWidget*,int)),this,SLOT(periphDown(peripheralWidget*,int)));
38 }
39 }
40
41 void SocRegsViewerNew::periphClicked(peripheralWidget *sender)
42 {
43 peripheralWidget * item;
44 if(sender!=NULL)
45 {
46 for(int i=0;i<p_peripherals.count();i++)
47 {
48 item = p_peripherals.at(i);
49 if(item!=sender)
50 {
51 item->leave();
52 }
53 }
54 }
55 }
56
57 void SocRegsViewerNew::periphUp(peripheralWidget *sender, int cursorIndex)
58 {
59 int index,senderIndex;
60 if(sender!=NULL)
61 {
62 index =senderIndex= p_peripherals.indexOf(sender);
63 while(index!=-1 && index!=0)
64 {
65 if(p_peripherals.at(index-1)->count()>0)
66 {
67 p_peripherals.at(senderIndex)->leave();
68 p_peripherals.at(index-1)->enter(cursorIndex,false);
69 // ensureWidgetVisible(p_peripherals.at(index-1));
70 break;
71 }
72 index--;
73 }
74 }
75 }
76
77 void SocRegsViewerNew::periphDown(peripheralWidget *sender, int cursorIndex)
78 {
79 int index,senderIndex;
80 if(sender!=NULL)
81 {
82 index=senderIndex= p_peripherals.indexOf(sender);
83 while((index!=-1) && (index<(p_peripherals.count()-1)))
84 {
85 if(p_peripherals.at(index+1)->count()>0)
86 {
87 p_peripherals.at(senderIndex)->leave();
88 p_peripherals.at(index+1)->enter(cursorIndex);
89 // ensureWidgetVisible(p_peripherals.at(index+1));
90 break;
91 }
92 index++;
93 }
94 }
95 }
96
97 void SocRegsViewerNew::changeEvent(QEvent *e)
98 {
99 QWidget::changeEvent(e);
100 switch (e->type()) {
101 case QEvent::LanguageChange:
102 ui->retranslateUi(this);
103 break;
104 default:
105 break;
106 }
107 }
@@ -0,0 +1,38
1 #ifndef SOCREGSVIEWERNEW_H
2 #define SOCREGSVIEWERNEW_H
3
4 #include <QWidget>
5 #include <peripheralwidget.h>
6 #include <collapsableperipheralwidget.h>
7
8 namespace Ui {
9 class SocRegsViewerNew;
10 }
11
12 class SocRegsViewerNew : public QWidget
13 {
14 Q_OBJECT
15
16 public:
17 explicit SocRegsViewerNew(const QString &name, QWidget *parent = 0);
18 ~SocRegsViewerNew();
19
20 peripheralWidget *peripheral(int index);
21
22 signals:
23
24 public slots:
25 void addPeripheral(peripheralWidget* peripheral);
26 void periphClicked(peripheralWidget* sender);
27 void periphUp(peripheralWidget* sender,int cursorIndex);
28 void periphDown(peripheralWidget* sender,int cursorIndex);
29 protected:
30 void changeEvent(QEvent *e);
31
32 private:
33 Ui::SocRegsViewerNew *ui;
34 QList<peripheralWidget*> p_peripherals;
35 QList<CollapsablePeripheralWidget*> p_CPeripherals;
36 };
37
38 #endif // SOCREGSVIEWERNEW_H
@@ -0,0 +1,60
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
3 <class>SocRegsViewerNew</class>
4 <widget class="QWidget" name="SocRegsViewerNew">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>713</width>
10 <height>357</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Form</string>
15 </property>
16 <layout class="QGridLayout" name="gridLayout">
17 <item row="0" column="1">
18 <widget class="QComboBox" name="rootPluginCmbBx"/>
19 </item>
20 <item row="2" column="0" colspan="2">
21 <widget class="QScrollArea" name="PeriphList">
22 <property name="widgetResizable">
23 <bool>true</bool>
24 </property>
25 <widget class="QWidget" name="scrollAreaWidgetContents">
26 <property name="geometry">
27 <rect>
28 <x>0</x>
29 <y>0</y>
30 <width>693</width>
31 <height>302</height>
32 </rect>
33 </property>
34 <layout class="QVBoxLayout" name="verticalLayout">
35 <item>
36 <widget class="QLabel" name="socName">
37 <property name="text">
38 <string>SocName</string>
39 </property>
40 <property name="alignment">
41 <set>Qt::AlignCenter</set>
42 </property>
43 </widget>
44 </item>
45 </layout>
46 </widget>
47 </widget>
48 </item>
49 <item row="0" column="0">
50 <widget class="QLabel" name="label">
51 <property name="text">
52 <string>Root Plugin</string>
53 </property>
54 </widget>
55 </item>
56 </layout>
57 </widget>
58 <resources/>
59 <connections/>
60 </ui>
@@ -1,14 +1,23
1
1
2 PERIPHERAL_WDGT_SOURCES =\
2 PERIPHERAL_WDGT_SOURCES =\
3 src/peripheralwidget.cpp \
3 src/peripheralwidget.cpp \
4 src/registerwidget.cpp \
4 src/registerwidget.cpp \
5 src/socregsviewer.cpp
5 src/socregsviewer.cpp \
6
6 src/socregsviewernew.cpp \
7 src/collapsableperipheralwidget.cpp
7
8
8
9
9 PERIPHERAL_WDGT_HEADERS += \
10 PERIPHERAL_WDGT_HEADERS += \
10 src/peripheralwidget.h \
11 src/peripheralwidget.h \
11 src/registerwidget.h \
12 src/registerwidget.h \
12 src/socregsviewer.h
13 src/socregsviewer.h \
14 src/socregsviewernew.h \
15 src/collapsableperipheralwidget.h
13
16
17 PERIPHERAL_WDGT_FORMS += \
18 src/socregsviewernew.ui \
19 src/collapsableperipheralwidget.ui
14
20
21 PERIPHERAL_WDGT_RESOURCES += \
22 $$PWD/ressources/peripheralwidget.qrc
23
@@ -1,279 +1,293
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the SocExplorer Software
2 -- This file is a part of the SocExplorer Software
3 -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS
3 -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------*/
18 -------------------------------------------------------------------------------*/
19 /*-- Author : Alexis Jeandet
19 /*-- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@member.fsf.org
20 -- Mail : alexis.jeandet@member.fsf.org
21 ----------------------------------------------------------------------------*/
21 ----------------------------------------------------------------------------*/
22 #include "peripheralwidget.h"
22 #include "peripheralwidget.h"
23
23
24 peripheralWidget::peripheralWidget(const QString &name, qint32 baseAddress, QWidget *parent) :
24 peripheralWidget::peripheralWidget(const QString &name, qint32 baseAddress, readWriteProxy *proxy, QWidget *parent) :
25 QWidget(parent)
25 QWidget(parent)
26 {
26 {
27 p_name = name;
27 p_name = name;
28 p_timer = new QTimer(this);
28 p_timer = new QTimer(this);
29 p_timer->setInterval(500);
29 p_timer->setInterval(500);
30 p_baseAddress = baseAddress;
30 p_baseAddress = baseAddress;
31 p_header = p_name + QString(" @0x%1").arg((uint)p_baseAddress,8,16);
31 p_header = p_name + QString(" @0x%1").arg((uint)p_baseAddress,8,16);
32 p_proxy = proxy;
32 setAttribute(Qt::WA_AlwaysShowToolTips);
33 setAttribute(Qt::WA_AlwaysShowToolTips);
33 setMouseTracking(true);
34 setMouseTracking(true);
34 setFocusPolicy(Qt::StrongFocus);
35 setFocusPolicy(Qt::StrongFocus);
35 selectedReg = -1;
36 selectedReg = -1;
36 registersWdgts.clear();
37 registersWdgts.clear();
37 connect(p_timer,SIGNAL(timeout()),this,SLOT(blinkCursor()));
38 connect(p_timer,SIGNAL(timeout()),this,SLOT(blinkCursor()));
38 setFont(QFont("Utopia", 14,QFont::Bold));
39 setFont(QFont("Utopia", 14,QFont::Bold));
40 setMinimumSize(400,100);
41 updateGeometry();
39 }
42 }
40
43
41 int peripheralWidget::count()
44 int peripheralWidget::count()
42 {
45 {
43 return registersWdgts.count();
46 return registersWdgts.count();
44 }
47 }
45
48
49 const QString &peripheralWidget::name()
50 {
51 return this->p_name;
52 }
53
46 void peripheralWidget::blinkCursor()
54 void peripheralWidget::blinkCursor()
47 {
55 {
48 if(selectedReg!=-1)
56 if(selectedReg!=-1)
49 registersWdgts.at(selectedReg)->blinkCursor();
57 registersWdgts.at(selectedReg)->blinkCursor();
50 repaint();
58 repaint();
51 }
59 }
52
60
53 void peripheralWidget::addRegister(const QString &name, qint32 address)
61 void peripheralWidget::addRegister(const QString &name, qint32 address)
54 {
62 {
55 /*TODO Should regs by address*/
63 /*TODO Should regs by address*/
56 registersWdgts.append(new registerWidget(name,address));
64 registersWdgts.append(new registerWidget(name,address));
57 connect(registersWdgts.last(),SIGNAL(repaint()),this,SLOT(repaint()));
65 connect(registersWdgts.last(),SIGNAL(repaint()),this,SLOT(repaint()));
58 }
66 }
59
67
60 void peripheralWidget::leave()
68 void peripheralWidget::leave()
61 {
69 {
62 if(selectedReg!=-1)
70 if(selectedReg!=-1)
63 {
71 {
64 p_timer->stop();
72 p_timer->stop();
65 registersWdgts.at(selectedReg)->leave();
73 registersWdgts.at(selectedReg)->leave();
66 selectedReg = -1;
74 selectedReg = -1;
67 repaint();
75 repaint();
68 }
76 }
69 }
77 }
70
78
71 void peripheralWidget::enter(int cursorIndex, bool fromTop)
79 void peripheralWidget::enter(int cursorIndex, bool fromTop)
72 {
80 {
73 if(cursorIndex>=0 && cursorIndex<32)
81 if(cursorIndex>=0 && cursorIndex<32)
74 {
82 {
75 if(fromTop)
83 if(fromTop)
76 {
84 {
77 registersWdgts.at(0)->enter(cursorIndex);
85 registersWdgts.at(0)->enter(cursorIndex);
78 selectedReg = 0;
86 selectedReg = 0;
79 }
87 }
80 else
88 else
81 {
89 {
82 registersWdgts.at(registersWdgts.count()-1)->enter(cursorIndex);
90 registersWdgts.at(registersWdgts.count()-1)->enter(cursorIndex);
83 selectedReg = registersWdgts.count()-1;
91 selectedReg = registersWdgts.count()-1;
84 }
92 }
85 p_timer->start();
93 p_timer->start();
86 this->setFocus();
94 this->setFocus();
87 }
95 }
88 }
96 }
89
97
98 void peripheralWidget::setReadWriteProxy(peripheralWidget::readWriteProxy *proxy)
99 {
100 this->p_proxy = proxy;
101 }
102
90 void peripheralWidget::mousePressEvent(QMouseEvent *event)
103 void peripheralWidget::mousePressEvent(QMouseEvent *event)
91 {
104 {
92 p_timer->stop();
105 p_timer->stop();
93 if(selectedReg!=-1)
106 if(selectedReg!=-1)
94 {
107 {
95 registersWdgts.at(selectedReg)->leave();
108 registersWdgts.at(selectedReg)->leave();
96 selectedReg = -1;
109 selectedReg = -1;
97 }
110 }
98 for(int i=0; i<registersWdgts.count();i++)
111 for(int i=0; i<registersWdgts.count();i++)
99 {
112 {
100 if(registersWdgts.at(i)->contains(event->pos()))
113 if(registersWdgts.at(i)->contains(event->pos()))
101 {
114 {
102 registersWdgts.at(i)->enter(registersWdgts.at(i)->cursorIndex(event->pos().x()));
115 registersWdgts.at(i)->enter(registersWdgts.at(i)->cursorIndex(event->pos().x()));
103 selectedReg = i;
116 selectedReg = i;
104 p_timer->start();
117 p_timer->start();
105 emit clicked(this);
118 emit clicked(this);
106 }
119 }
107 }
120 }
108 repaint();
121 repaint();
109 }
122 }
110
123
111 void peripheralWidget::mouseMoveEvent(QMouseEvent *event)
124 void peripheralWidget::mouseMoveEvent(QMouseEvent *event)
112 {
125 {
113 bool match=false;
126 bool match=false;
114 if(event->buttons()==Qt::LeftButton)
127 if(event->buttons()==Qt::LeftButton)
115 {
128 {
116 for(int i=0; i<registersWdgts.count();i++)
129 for(int i=0; i<registersWdgts.count();i++)
117 {
130 {
118 if(registersWdgts.at(i)->contains(event->pos()))
131 if(registersWdgts.at(i)->contains(event->pos()))
119 {
132 {
120 registersWdgts.at(i)->updateSelection(registersWdgts.at(i)->cursorIndex(event->pos().x()));
133 registersWdgts.at(i)->updateSelection(registersWdgts.at(i)->cursorIndex(event->pos().x()));
121 }
134 }
122 }
135 }
123 }
136 }
124 else
137 else
125 {
138 {
126 for(int i=0; i<registersWdgts.count();i++)
139 for(int i=0; i<registersWdgts.count();i++)
127 {
140 {
128 if(registersWdgts.at(i)->contains(event->pos()))
141 if(registersWdgts.at(i)->contains(event->pos()))
129 {
142 {
130 match = true;
143 match = true;
131 int bitfieldIndex=registersWdgts.at(i)->cursorIndex(event->pos().x());
144 int bitfieldIndex=registersWdgts.at(i)->cursorIndex(event->pos().x());
132
133 QString toolTipText ="<b>< font color='Black'>"+registersWdgts.at(i)->bitFieldName(bitfieldIndex) +"</b><br />";
145 QString toolTipText ="<b>< font color='Black'>"+registersWdgts.at(i)->bitFieldName(bitfieldIndex) +"</b><br />";
134 toolTipText+= "Hexadecimal=<b>< font color='Blue'>"+registersWdgts.at(i)->bitFieldToHex(bitfieldIndex)+"</b>";
146 toolTipText+= "Hexadecimal=<b>< font color='Blue'>"+registersWdgts.at(i)->bitFieldToHex(bitfieldIndex)+"</b>";
135 toolTipText+= " Decimal=<b>< font color='BlueViolet'>"+registersWdgts.at(i)->bitFieldToDec(bitfieldIndex)+"</b><br />";
147 toolTipText+= " Decimal=<b>< font color='BlueViolet'>"+registersWdgts.at(i)->bitFieldToDec(bitfieldIndex)+"</b><br />";
136 toolTipText+= registersWdgts.at(i)->bitFieldDesc(bitfieldIndex);
148 toolTipText+= registersWdgts.at(i)->bitFieldDesc(bitfieldIndex);
137 QToolTip::showText(event->globalPos(),toolTipText,(QWidget*)this);
149 QToolTip::showText(event->globalPos(),toolTipText,(QWidget*)this);
138 }
150 }
139 }
151 }
140 if(!match)QToolTip::hideText();
152 if(!match)QToolTip::hideText();
141 }
153 }
142 }
154 }
143
155
144 void peripheralWidget::mouseReleaseEvent(QMouseEvent *event)
156 void peripheralWidget::mouseReleaseEvent(QMouseEvent *event)
145 {
157 {
146 Q_UNUSED(event)
158 Q_UNUSED(event)
147 }
159 }
148
160
149 void peripheralWidget::keyPressEvent(QKeyEvent *event)
161 void peripheralWidget::keyPressEvent(QKeyEvent *event)
150 {
162 {
151 if(this->selectedReg!=-1){
163 if(this->selectedReg!=-1){
152 if(event->modifiers()==Qt::ControlModifier)
164 if(event->modifiers()==Qt::ControlModifier)
153 {
165 {
154 switch(event->key())
166 switch(event->key())
155 {
167 {
156 case Qt::Key_Up:
168 case Qt::Key_Up:
157 registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
169 registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
158 break;
170 break;
159 case Qt::Key_Down:
171 case Qt::Key_Down:
160 registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
172 registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
161 break;
173 break;
162 case Qt::Key_W:
174 case Qt::Key_W:
163 emit writeRegSig(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value());
175 p_proxy->writeReg(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value());
164 registersWdgts.at(selectedReg)->setUpdated(true);
176 registersWdgts.at(selectedReg)->setUpdated(true);
165 registersWdgts.at(selectedReg)->repaint();
177 registersWdgts.at(selectedReg)->repaint();
166 break;
178 break;
167 case Qt::Key_R:
179 case Qt::Key_R:
168 qint32 value;
180 qint32 value;
169 value = emit readRegSig(registersWdgts.at(selectedReg)->address());
181 value = p_proxy->readReg(registersWdgts.at(selectedReg)->address());
170 registersWdgts.at(selectedReg)->setValue(value);
182 registersWdgts.at(selectedReg)->setValue(value);
171 break;
183 break;
172 default:
184 default:
173 break;
185 break;
174 }
186 }
175 }
187 }
176 else
188 else
177 {
189 {
178 switch(event->key())
190 switch(event->key())
179 {
191 {
180 case Qt::Key_0:
192 case Qt::Key_0:
181 registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
193 registersWdgts.at(selectedReg)->clear(registersWdgts.at(selectedReg)->cursorIndex());
182 registersWdgts.at(selectedReg)->moveCursorRight(1);
194 registersWdgts.at(selectedReg)->moveCursorRight(1);
183 break;
195 break;
184 case Qt::Key_1:
196 case Qt::Key_1:
185 registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
197 registersWdgts.at(selectedReg)->set(registersWdgts.at(selectedReg)->cursorIndex());
186 registersWdgts.at(selectedReg)->moveCursorRight(1);
198 registersWdgts.at(selectedReg)->moveCursorRight(1);
187 break;
199 break;
188 case Qt::Key_Right:
200 case Qt::Key_Right:
189 registersWdgts.at(selectedReg)->moveCursorRight(1);
201 registersWdgts.at(selectedReg)->moveCursorRight(1);
190 this->repaint();
202 this->repaint();
191 break;
203 break;
192 case Qt::Key_Left:
204 case Qt::Key_Left:
193 registersWdgts.at(selectedReg)->moveCursorLeft(1);
205 registersWdgts.at(selectedReg)->moveCursorLeft(1);
194 this->repaint();
206 this->repaint();
195 break;
207 break;
196 case Qt::Key_Up:
208 case Qt::Key_Up:
197 up();
209 up();
198 break;
210 break;
199 case Qt::Key_Down:
211 case Qt::Key_Down:
200 down();
212 down();
201 break;
213 break;
202 case Qt::Key_W:
214 case Qt::Key_W:
203 emit writeRegSig(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value());
215 p_proxy->writeReg(registersWdgts.at(selectedReg)->address(),registersWdgts.at(selectedReg)->value());
204 registersWdgts.at(selectedReg)->setUpdated(true);
216 registersWdgts.at(selectedReg)->setUpdated(true);
205 registersWdgts.at(selectedReg)->repaint();
217 registersWdgts.at(selectedReg)->repaint();
206 break;
218 break;
207 case Qt::Key_R:
219 case Qt::Key_R:
208 qint32 value;
220 qint32 value;
209 value = emit readRegSig(registersWdgts.at(selectedReg)->address());
221 value = p_proxy->readReg(registersWdgts.at(selectedReg)->address());
210 registersWdgts.at(selectedReg)->setValue(value);
222 registersWdgts.at(selectedReg)->setValue(value);
211 break;
223 break;
212 default:
224 default:
213 break;
225 break;
214 }
226 }
215 }
227 }
216
228
217 }
229 }
218 }
230 }
219
231
220 void peripheralWidget::paintEvent(QPaintEvent *event)
232 void peripheralWidget::paintEvent(QPaintEvent *event)
221 {
233 {
222 Q_UNUSED(event)
234 Q_UNUSED(event)
223
235
224 QPainter painter(this);
236 QPainter painter(this);
225 QPoint offset=QPoint(0,0);
237 QPoint offset=QPoint(0,0);
226 int nameWidth = fontMetrics().width(p_header);
238 int nameWidth = fontMetrics().width(p_header);
227 if(registersWdgts.count()==0)
239 if(registersWdgts.count()==0)
228 {
240 {
229 setMinimumSize(2*nameWidth+10,fontMetrics().height()+10);
241 setMinimumSize(2*nameWidth+10,fontMetrics().height()+10);
230 }
242 }
231 painter.drawText((this->minimumWidth()/2)-nameWidth,4,fontMetrics().width(p_header),fontMetrics().height()+4,Qt::AlignCenter,p_header);
243 painter.drawText((this->minimumWidth()/2)-nameWidth,4,fontMetrics().width(p_header),fontMetrics().height()+4,Qt::AlignCenter,p_header);
232 offset+=QPoint(0,fontMetrics().height()+8);
244 offset+=QPoint(0,fontMetrics().height()+8);
233 for(int i=0;i<registersWdgts.count();i++)
245 for(int i=0;i<registersWdgts.count();i++)
234 {
246 {
235 offset = registersWdgts.at(i)->paint(&painter,offset);
247 offset = registersWdgts.at(i)->paint(&painter,offset);
236 }
248 }
237 if(registersWdgts.count()>0)
249 if(registersWdgts.count()>0)
238 {
250 {
239 setMinimumSize(registersWdgts.first()->boundingRect().width(),offset.y());
251 int w=registersWdgts.first()->boundingRect().width();
252 int h=offset.y();
253 setMinimumSize(w,h);
240 }
254 }
241 updateGeometry();
255 updateGeometry();
242
256
243 }
257 }
244
258
245 void peripheralWidget::up()
259 void peripheralWidget::up()
246 {
260 {
247 if(selectedReg!=-1)
261 if(selectedReg!=-1)
248 {
262 {
249 if(selectedReg >0)
263 if(selectedReg >0)
250 {
264 {
251 registersWdgts.at(selectedReg-1)->enter(registersWdgts.at(selectedReg)->cursorIndex());
265 registersWdgts.at(selectedReg-1)->enter(registersWdgts.at(selectedReg)->cursorIndex());
252 registersWdgts.at(selectedReg)->leave();
266 registersWdgts.at(selectedReg)->leave();
253 selectedReg-=1;
267 selectedReg-=1;
254 repaint();
268 repaint();
255 }
269 }
256 else
270 else
257 {
271 {
258 emit upSig(this,registersWdgts.at(selectedReg)->cursorIndex());
272 emit upSig(this,registersWdgts.at(selectedReg)->cursorIndex());
259 }
273 }
260 }
274 }
261 }
275 }
262
276
263 void peripheralWidget::down()
277 void peripheralWidget::down()
264 {
278 {
265 if(selectedReg!=-1)
279 if(selectedReg!=-1)
266 {
280 {
267 if(selectedReg <(registersWdgts.count()-1))
281 if(selectedReg <(registersWdgts.count()-1))
268 {
282 {
269 registersWdgts.at(selectedReg+1)->enter(registersWdgts.at(selectedReg)->cursorIndex());
283 registersWdgts.at(selectedReg+1)->enter(registersWdgts.at(selectedReg)->cursorIndex());
270 registersWdgts.at(selectedReg)->leave();
284 registersWdgts.at(selectedReg)->leave();
271 selectedReg+=1;
285 selectedReg+=1;
272 repaint();
286 repaint();
273 }
287 }
274 else
288 else
275 {
289 {
276 emit downSig(this,registersWdgts.at(selectedReg)->cursorIndex());
290 emit downSig(this,registersWdgts.at(selectedReg)->cursorIndex());
277 }
291 }
278 }
292 }
279 }
293 }
@@ -1,83 +1,95
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the SocExplorer Software
2 -- This file is a part of the SocExplorer Software
3 -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS
3 -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------*/
18 -------------------------------------------------------------------------------*/
19 /*-- Author : Alexis Jeandet
19 /*-- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@member.fsf.org
20 -- Mail : alexis.jeandet@member.fsf.org
21 ----------------------------------------------------------------------------*/
21 ----------------------------------------------------------------------------*/
22 #ifndef PERIPHERALWIDGET_H
22 #ifndef PERIPHERALWIDGET_H
23 #define PERIPHERALWIDGET_H
23 #define PERIPHERALWIDGET_H
24
24
25 #include <QWidget>
25 #include <QWidget>
26 #include <QGroupBox>
26 #include <QGroupBox>
27 #include <QVBoxLayout>
27 #include <QVBoxLayout>
28 #include <QList>
28 #include <QList>
29 #include <QTimer>
29 #include <QTimer>
30 #include "registerwidget.h"
30 #include "registerwidget.h"
31 #if defined(SOCEXPLORER_SDK_BUILD)
31 #if defined(SOCEXPLORER_SDK_BUILD)
32 # define SOCEXPLORER_SDK_EXPORT Q_DECL_EXPORT
32 # define SOCEXPLORER_SDK_EXPORT Q_DECL_EXPORT
33 #else
33 #else
34 # define SOCEXPLORER_SDK_EXPORT Q_DECL_IMPORT
34 # define SOCEXPLORER_SDK_EXPORT Q_DECL_IMPORT
35 #endif
35 #endif
36
36
37 /*
37 /*
38 * TODO ADD an outdated marker
38 * TODO ADD an outdated marker
39 * Show outdated registers with a different color for example
39 * Show outdated registers with a different color for example
40 */
40 */
41
41 class SOCEXPLORER_SDK_EXPORT peripheralWidget : public QWidget
42 class SOCEXPLORER_SDK_EXPORT peripheralWidget : public QWidget
42 {
43 {
43 Q_OBJECT
44 Q_OBJECT
44 public:
45 public:
45 explicit peripheralWidget(const QString& name,qint32 baseAddress, QWidget *parent = 0);
46 class readWriteProxy
47 {
48 public:
49 readWriteProxy() {}
50 virtual void writeReg(qint32 address,qint32 value)=0;
51 virtual qint32 readReg(qint32 address)=0;
52 };
53
54 explicit peripheralWidget(const QString& name,qint32 baseAddress,readWriteProxy* proxy=0, QWidget *parent = 0);
46 registerWidget* registerAt(int index)
55 registerWidget* registerAt(int index)
47 {
56 {
48 if(index>=0 && index<registersWdgts.count())
57 if(index>=0 && index<registersWdgts.count())
49 return registersWdgts.at(index);
58 return registersWdgts.at(index);
50 return NULL;
59 return NULL;
51 }
60 }
52 int count();
61 int count();
62 const QString& name();
53 signals:
63 signals:
54 void writeRegSig(qint32 address,qint32 value);
64 void writeRegSig(qint32 address,qint32 value);
55 qint32 readRegSig(qint32 address);
65 qint32 readRegSig(qint32 address);
56 void clicked(peripheralWidget* sender);
66 void clicked(peripheralWidget* sender);
57 void upSig(peripheralWidget* sender,int cursorIndex);
67 void upSig(peripheralWidget* sender,int cursorIndex);
58 void downSig(peripheralWidget* sender,int cursorIndex);
68 void downSig(peripheralWidget* sender,int cursorIndex);
59 public slots:
69 public slots:
60 void blinkCursor();
70 void blinkCursor();
61 void addRegister(const QString& name,qint32 address);
71 void addRegister(const QString& name,qint32 address);
62 void leave();
72 void leave();
63 void enter(int cursorIndex,bool fromTop=true);
73 void enter(int cursorIndex,bool fromTop=true);
74 void setReadWriteProxy(readWriteProxy* proxy);
64 protected:
75 protected:
65 void mousePressEvent(QMouseEvent *event);
76 void mousePressEvent(QMouseEvent *event);
66 void mouseMoveEvent(QMouseEvent *event);
77 void mouseMoveEvent(QMouseEvent *event);
67 void mouseReleaseEvent(QMouseEvent *event);
78 void mouseReleaseEvent(QMouseEvent *event);
68 void keyPressEvent(QKeyEvent * event);
79 void keyPressEvent(QKeyEvent * event);
69 void paintEvent(QPaintEvent* event);
80 void paintEvent(QPaintEvent* event);
70
81
71 private:
82 private:
72 void up();
83 void up();
73 void down();
84 void down();
74 QString p_name;
85 QString p_name;
75 QString p_header;
86 QString p_header;
76 qint32 p_baseAddress;
87 qint32 p_baseAddress;
77 QList<registerWidget*> registersWdgts;
88 QList<registerWidget*> registersWdgts;
78 int selectedReg;
89 int selectedReg;
79 QTimer* p_timer;
90 QTimer* p_timer;
91 readWriteProxy* p_proxy;
80
92
81 };
93 };
82
94
83 #endif // PERIPHERALWIDGET_H
95 #endif // PERIPHERALWIDGET_H
General Comments 0
You need to be logged in to leave comments. Login now