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