xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/wifi/switchwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #include "switchwidget.h"
2*4882a593Smuzhiyun #include <QPainter>
3*4882a593Smuzhiyun #include<QPen>
4*4882a593Smuzhiyun #include <QMouseEvent>
5*4882a593Smuzhiyun #include <QDebug>
6*4882a593Smuzhiyun 
SwitchWidget(QWidget * parent)7*4882a593Smuzhiyun SwitchWidget::SwitchWidget(QWidget *parent) : QWidget(parent),m_bOpen(false),
8*4882a593Smuzhiyun     m_ratio(0.7)
9*4882a593Smuzhiyun {
10*4882a593Smuzhiyun     this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
11*4882a593Smuzhiyun }
12*4882a593Smuzhiyun 
setText(const QString & title)13*4882a593Smuzhiyun void SwitchWidget::setText(const QString &title)
14*4882a593Smuzhiyun {
15*4882a593Smuzhiyun     m_text = title;
16*4882a593Smuzhiyun }
17*4882a593Smuzhiyun 
text()18*4882a593Smuzhiyun QString SwitchWidget::text()
19*4882a593Smuzhiyun {
20*4882a593Smuzhiyun     return m_text;
21*4882a593Smuzhiyun }
22*4882a593Smuzhiyun 
isOpen()23*4882a593Smuzhiyun bool SwitchWidget::isOpen()
24*4882a593Smuzhiyun {
25*4882a593Smuzhiyun     return m_bOpen;
26*4882a593Smuzhiyun }
27*4882a593Smuzhiyun 
setTextRatio(qreal ratio)28*4882a593Smuzhiyun void SwitchWidget::setTextRatio(qreal ratio)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun     if(ratio< 0.5)
31*4882a593Smuzhiyun     {
32*4882a593Smuzhiyun         m_ratio =0.5;
33*4882a593Smuzhiyun     }
34*4882a593Smuzhiyun     if(ratio >0.8)
35*4882a593Smuzhiyun     {
36*4882a593Smuzhiyun         m_ratio= 0.8;
37*4882a593Smuzhiyun     }
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun 
setOpen(bool bOpen)40*4882a593Smuzhiyun void SwitchWidget::setOpen(bool bOpen)
41*4882a593Smuzhiyun {
42*4882a593Smuzhiyun     m_bOpen =bOpen;
43*4882a593Smuzhiyun     this->update();
44*4882a593Smuzhiyun     click(bOpen);
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun 
paintEvent(QPaintEvent * e)47*4882a593Smuzhiyun void SwitchWidget::paintEvent(QPaintEvent *e)
48*4882a593Smuzhiyun {
49*4882a593Smuzhiyun     QPainter painter(this);
50*4882a593Smuzhiyun     painter.setRenderHint(QPainter::Antialiasing);
51*4882a593Smuzhiyun     QRectF visualRect = this->rect().adjusted(1, 1, -1, -1);
52*4882a593Smuzhiyun     qreal textWidth = visualRect.width()*m_ratio;
53*4882a593Smuzhiyun     qreal textHeight = visualRect.height();
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun     QRectF tectRect = QRectF(visualRect.x(), visualRect.y(), textWidth, textHeight);
56*4882a593Smuzhiyun     QTextOption option( Qt::AlignVCenter);
57*4882a593Smuzhiyun     QRectF fixTextRect = painter.boundingRect(tectRect, m_text,option);
58*4882a593Smuzhiyun     painter.drawText(fixTextRect, m_text);
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun     QRectF switchRect(visualRect.x() + textWidth,
61*4882a593Smuzhiyun                      visualRect.y(),
62*4882a593Smuzhiyun                      visualRect.width()-textWidth,
63*4882a593Smuzhiyun                      visualRect.height());
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun     m_rect = switchRect;
66*4882a593Smuzhiyun     m_bOpen? painter.setBrush(Qt::blue) : painter.setBrush(Qt::gray);
67*4882a593Smuzhiyun     painter.setPen(Qt::transparent);
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun     int radius = switchRect.height()/2;
70*4882a593Smuzhiyun     painter.drawRoundedRect(switchRect, radius, radius);
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun     QPoint center(switchRect.x() +radius,
73*4882a593Smuzhiyun                   switchRect.y() +radius);
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun     if(m_bOpen)
76*4882a593Smuzhiyun     {
77*4882a593Smuzhiyun         center.setX(switchRect.x() +switchRect.width()-radius);
78*4882a593Smuzhiyun     }
79*4882a593Smuzhiyun     painter.setBrush(Qt::white);
80*4882a593Smuzhiyun     painter.drawEllipse(center,
81*4882a593Smuzhiyun                         visualRect.height()/2 -radius/6,
82*4882a593Smuzhiyun                         visualRect.height()/2 -radius/6);
83*4882a593Smuzhiyun }
84*4882a593Smuzhiyun 
mousePressEvent(QMouseEvent * e)85*4882a593Smuzhiyun void SwitchWidget::mousePressEvent(QMouseEvent *e)
86*4882a593Smuzhiyun {
87*4882a593Smuzhiyun     QWidget::mousePressEvent(e);
88*4882a593Smuzhiyun     if(m_rect.contains(e->pos()))
89*4882a593Smuzhiyun     {
90*4882a593Smuzhiyun         m_bOpen = !m_bOpen;
91*4882a593Smuzhiyun         this->update();
92*4882a593Smuzhiyun         emit click(m_bOpen);
93*4882a593Smuzhiyun         qDebug()<<"click ="<< m_bOpen;
94*4882a593Smuzhiyun     }else{
95*4882a593Smuzhiyun         qDebug()<<"not button rect";
96*4882a593Smuzhiyun     }
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun 
sizeHint() const99*4882a593Smuzhiyun QSize SwitchWidget::sizeHint() const
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun     return QSize(160, 25);
102*4882a593Smuzhiyun }
103