xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/serialassistant/rollswitchwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "rollswitchwidget.h"
2 #include <QMouseEvent>
3 #include <QPainter>
4 #include<QPen>
5 #include <QDebug>
6 #include <qmath.h>
7 
RollSwitchWidget(QWidget * parent)8 RollSwitchWidget::RollSwitchWidget(QWidget *parent)
9     : QWidget(parent),
10       m_text("SERIAL  %1"),
11       m_index(0),
12       m_count(3)
13 {
14 
15 }
16 
setCount(int count)17 void RollSwitchWidget::setCount(int count)
18 {
19     m_count = count;
20 }
21 
currentIndex()22 int RollSwitchWidget::currentIndex()
23 {
24     return m_index;
25 }
26 
getPoint(int r,int angle)27 QPoint getPoint(int r, int angle)
28 {
29     int x1 = r * qCos(angle * M_PI / 180);
30     int y1 = r * qSin(angle * M_PI /180);
31 
32     return QPoint(x1, y1);
33 }
34 
paintEvent(QPaintEvent * e)35 void RollSwitchWidget::paintEvent(QPaintEvent *e)
36 {
37     QWidget::paintEvent(e);
38     QPainter painter(this);
39     painter.setRenderHints(QPainter::Antialiasing);
40     QMargins margins = contentsMargins();
41 
42     QFont f =  this->font();
43     f.setPointSizeF(f.pointSizeF()+1);
44     f.setBold(true);
45     painter.setFont(f);
46 
47     QRect rect = this->rect().adjusted(margins.left(), margins.top(), - margins.bottom(), -margins.right());
48 
49     int textX = rect.width()/3;
50     int textY = rect.y();
51     QString text = QString(m_text).arg(m_index+1);
52 
53     QRectF textRect(textX, textY, textX, rect.height());
54     QTextOption option(Qt::AlignCenter);
55     QRectF fixRect = painter.boundingRect(textRect, text, option);
56     painter.save();
57     //painter.setPen(QColor(141, 141, 141));
58     painter.setPen(QColor(56, 56, 56));
59     painter.drawText(fixRect, text);
60     painter.restore();
61 
62     m_leftRect= QRect(rect.x(), rect.y(), textX, rect.height());
63     m_rightRect = QRect(rect.x() +textX*2, rect.y(), textX, rect.height());
64 
65     int r = m_leftRect.height()/2;
66     QPointF center(m_leftRect.x()+ m_leftRect.width()/2,
67                   m_leftRect.y() +m_leftRect.height()/2);
68 
69 
70     QPen pen(Qt::gray);
71     pen.setWidthF(2.5);
72 
73     painter.save();
74 
75     QPalette palette = this->palette();
76     palette.setCurrentColorGroup(QPalette::Disabled);
77 //    if(currentIndex() == 0)
78 //    {
79 //        pen.setColor(palette.color(QPalette::Text));
80 //    }
81     painter.setPen(pen);
82     painter.translate(center);
83     painter.drawLine(QPointF(0,0), getPoint(m_leftRect, 30));
84     painter.drawLine(QPointF(0,0), getPoint(m_leftRect, -30));
85     painter.restore();
86 
87     center = QPointF(m_rightRect.x() + m_rightRect.width()/2,
88                 m_rightRect.y() + m_rightRect.height()/2);
89     painter.save();
90     pen.setColor(Qt::gray);
91 //    if(currentIndex() == m_count-1)
92 //    {
93 //        pen.setColor(palette.color(QPalette::Text));
94 //    }
95     painter.setPen(pen);
96     painter.translate(center);
97     painter.drawLine(QPointF(0,0), getPoint(m_rightRect, 150));
98     painter.drawLine(QPointF(0,0), getPoint(m_rightRect, -150));
99     painter.restore();
100 
101 }
102 
mousePressEvent(QMouseEvent * e)103 void RollSwitchWidget::mousePressEvent(QMouseEvent *e)
104 {
105     if(m_leftRect.contains(e->pos()))
106     {
107         m_index --;
108     }else if(m_rightRect.contains(e->pos()))
109     {
110         m_index ++;
111     }
112 
113     if(m_index <0)
114     {
115         m_index =2;
116     }if(m_index >= m_count)
117     {
118         m_index =0;
119     }
120     this->update();
121     emit indexChange(m_index);
122 
123 }
124 
getPoint(const QRect & rect,int angle)125 QPointF RollSwitchWidget::getPoint(const QRect &rect, int angle)
126 {
127     int r = rect.width()/2;
128     if(rect.width() >rect.height())
129     {
130         r = rect.height()/2;
131     }
132 
133     int x1 = r * qCos(angle * M_PI / 180);
134     int y1 = r * qSin(angle * M_PI /180);
135 
136     return QPointF(x1, y1);
137 
138 }
139