xref: /OK3568_Linux_fs/app/forlinx/flapp/src/app/boxwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "boxwidget.h"
2 #include <QGridLayout>
3 #include "plughandler.h"
4 #include <QPainter>
5 #include <QRect>
6 #include <QMouseEvent>
7 #include <QResizeEvent>
8 #include <qmath.h>
9 #include <QDebug>
10 #include <QCoreApplication>
BoxWidget(QWidget * parent)11 BoxWidget::BoxWidget(QWidget *parent) : QWidget(parent),
12     m_index(0)
13 {
14     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
15     m_ids = PlugHandler::instance()->getShowPlugins();
16     this->setMouseTracking(true);
17 
18     QFont f= this->font();
19     f.setPixelSize(18);
20     this->setFont(f);
21 }
22 
mousePressEvent(QMouseEvent * e)23 void BoxWidget::mousePressEvent(QMouseEvent *e)
24 {
25     QWidget::mousePressEvent(e);
26     qDebug()<<"release:"<< e->pos();
27 }
28 
mouseReleaseEvent(QMouseEvent * e)29 void BoxWidget::mouseReleaseEvent(QMouseEvent *e)
30 {
31     QWidget::mouseReleaseEvent(e);
32     //判断翻页被点击.
33     if(m_rightRect.contains(e->pos()))
34     {
35         qDebug()<<"right";
36         m_index++;
37         if(m_index >= qCeil(m_ids.size()/12.0)){
38             m_index =0;
39         }
40         update();
41         return;
42     }else if(m_leftRect.contains(e->pos()))
43     {
44          qDebug()<<"left";
45         m_index--;
46         if(m_index <0){
47             m_index =qCeil(m_ids.size()/12.0)-1;
48         }
49         update();
50         return;
51     }
52 
53     for(int i=0; i<m_rects.size(); i++){
54         QRect rect = m_rects[i];
55         if(rect.contains(e->pos())){
56             qDebug()<< m_ids[i+m_index*12];
57             showPlugins(m_ids[i+m_index*12]);
58 //          printf(QString("START_%1_END").arg(m_ids[i+m_index*12]).toLatin1().data() );
59 //            fflush(stdout);
60             break;
61         }
62     }
63 
64     qDebug()<<"release:"<< e->pos() << m_rightRect;
65 }
66 
mouseMoveEvent(QMouseEvent * e)67 void BoxWidget::mouseMoveEvent(QMouseEvent *e)
68 {
69     QWidget::mouseMoveEvent(e);
70     m_pos = e->pos();
71     this->update();
72 }
73 
paintEvent(QPaintEvent * e)74 void BoxWidget::paintEvent(QPaintEvent *e)
75 {
76     QPainter painter(this);
77 //    painter.fillRect(this->rect(), Qt::black);
78 //    painter.setPen(Qt::white);
79     QRect r = rect().adjusted(10, 10, -10, -20);
80     qreal avgeWidth = r.width()/4;
81     qreal avgeHight = r.height()/3;
82     m_rects.clear();
83 
84     //获取当前页的数据.
85     QRect mouseEnterRect;
86     QStringList ids;
87     for(int j=m_index*12; j<m_ids.size(); j++){
88         ids << m_ids[j];
89     }
90 
91     //绘制窗口网格.
92     for(int i=0; i<ids.size() && i<12  ; i++){
93         int row=  qFloor(i/4);
94         int col= i%4;
95 
96         QRect rect(r.x()+col*avgeWidth, r.y()+row*avgeHight, avgeWidth, avgeHight);
97 
98         QString fileName=qApp->applicationDirPath() +"/forlinx/" +ids[i] +".png";
99         QPixmap p(fileName);
100         QTextOption option=QTextOption(Qt::AlignCenter);
101         if(!p.isNull())
102         {
103             QPoint center(rect.x() + rect.width()/2, rect.y() + rect.height()/2);
104             center.setX(center.x()- p.width()/2);
105             center.setY(center.y() -p.height()/2);
106             painter.drawPixmap(center, p);
107             option = QTextOption(Qt::AlignCenter | Qt::AlignBottom);
108         }
109 
110         QRectF textRect =painter.boundingRect(rect, ids[i], option);
111         painter.drawText(textRect, ids[i]);
112         painter.save();
113         painter.setPen(Qt::gray);
114         painter.drawRect(rect);
115         painter.restore();
116         if(rect.contains(m_pos))
117         {
118             mouseEnterRect = rect;
119         }
120         m_rects<< rect;
121 
122     }
123 
124     //绘制鼠标悬浮区域.
125     if(!mouseEnterRect.isEmpty())
126     {
127         painter.setPen(Qt::blue);
128         painter.drawRect(mouseEnterRect);
129     }
130 
131     if(!m_leftRect.isNull())
132     {
133         //绘制翻页区域.
134         painter.setBrush(Qt::black);
135         painter.setPen(Qt::white);
136         painter.drawRect(m_leftRect);
137         painter.drawText(painter.boundingRect(m_leftRect, "<",QTextOption(Qt::AlignCenter)), "<");
138         painter.drawRect(m_rightRect);
139         painter.drawText(painter.boundingRect(m_rightRect, ">", QTextOption(Qt::AlignCenter)), ">");
140     }
141 }
142 
resizeEvent(QResizeEvent * e)143 void BoxWidget::resizeEvent(QResizeEvent *e)
144 {
145     QWidget::resizeEvent(e);
146     if(m_ids.size() >12){
147         int w=e->size().width();
148         int h =e->size().height();
149         m_leftRect = QRect (0, h-20, 30, 20);
150         m_rightRect =QRect (w-30, h-20, 30, 20);
151         qDebug()<< m_rightRect;
152     }
153 }
154