1*4882a593Smuzhiyun #include "backlightwidget.h"
2*4882a593Smuzhiyun #include "ui_backlightwidget.h"
3*4882a593Smuzhiyun #include "ibacklight.h"
4*4882a593Smuzhiyun #include <QPainter>
5*4882a593Smuzhiyun #include <QPen>
6*4882a593Smuzhiyun #include <QBrush>
7*4882a593Smuzhiyun #include <QGuiApplication>
8*4882a593Smuzhiyun #include <QScreen>
9*4882a593Smuzhiyun #include <QDebug>
10*4882a593Smuzhiyun #include "systemmanager.h"
11*4882a593Smuzhiyun
BacklightWidget(QWidget * parent)12*4882a593Smuzhiyun BacklightWidget::BacklightWidget(QWidget *parent) :
13*4882a593Smuzhiyun IWidget(parent),
14*4882a593Smuzhiyun ui(new Ui::BacklightWidget),
15*4882a593Smuzhiyun m_currentBacklight(NULL)
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun ui->setupUi(this);
18*4882a593Smuzhiyun }
19*4882a593Smuzhiyun
~BacklightWidget()20*4882a593Smuzhiyun BacklightWidget::~BacklightWidget()
21*4882a593Smuzhiyun {
22*4882a593Smuzhiyun delete ui;
23*4882a593Smuzhiyun }
24*4882a593Smuzhiyun
initUi()25*4882a593Smuzhiyun void BacklightWidget::initUi()
26*4882a593Smuzhiyun {
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun this->createColowWidget();
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun QGuiApplication *app = dynamic_cast<QGuiApplication*>(qApp);
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun if(!SystemManager::instance()->platformInfo().contains("noscreenname"))
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun foreach (QScreen *screen, app->screens()) {
35*4882a593Smuzhiyun ui->comboBox->addItem(screen->name());
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun }else{
38*4882a593Smuzhiyun foreach (Backlight *b, m_backlights) {
39*4882a593Smuzhiyun ui->comboBox->addItem(b->screenName());
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun }
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun ui->textBrowser->append("screen information: ");
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &name){
46*4882a593Smuzhiyun foreach (Backlight *b, m_backlights) {
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun qDebug()<< b->screenName() << "/" << name;
49*4882a593Smuzhiyun if(b->screenName() == name){
50*4882a593Smuzhiyun if(m_currentBacklight != NULL && m_currentBacklight->screenName() != name)
51*4882a593Smuzhiyun {
52*4882a593Smuzhiyun m_currentBacklight->close();
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun m_currentBacklight = b;
55*4882a593Smuzhiyun ui->horizontalSlider->setEnabled(m_currentBacklight->open());
56*4882a593Smuzhiyun break;
57*4882a593Smuzhiyun }
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun foreach (QScreen *screen, app->screens()) {
61*4882a593Smuzhiyun QString screenName =screen->name();
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun if(SystemManager::instance()->platformInfo().contains("noscreenname"))
64*4882a593Smuzhiyun {
65*4882a593Smuzhiyun screenName = QString("%1x%2").arg(screen->size().width()).arg(screen->size().height());
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun if(screenName == name){
68*4882a593Smuzhiyun ui->textBrowser->clear();
69*4882a593Smuzhiyun ui->textBrowser->append(QString("屏幕个数: %1").arg(app->screens().count()));
70*4882a593Smuzhiyun ui->textBrowser->append(QString("屏幕像素分辨率: %1 X %2").arg( screen->size().width()).arg(screen->size().height()));
71*4882a593Smuzhiyun ui->textBrowser->append(QString("屏幕可用大小(像素为单位): %1 X %2").arg( screen->availableSize().width()).arg(screen->availableSize().height()));
72*4882a593Smuzhiyun ui->textBrowser->append(QString("每英寸的逻辑点或像素数: %1").arg( screen->logicalDotsPerInch()));
73*4882a593Smuzhiyun ui->textBrowser->append(QString("屏幕的颜色深度): %1").arg( screen->depth()));
74*4882a593Smuzhiyun ui->textBrowser->append(QString("垂直刷新率 Hz: %1").arg( screen->refreshRate()));
75*4882a593Smuzhiyun break;
76*4882a593Smuzhiyun }
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun });
80*4882a593Smuzhiyun QString screename;
81*4882a593Smuzhiyun if(SystemManager::instance()->platformInfo().contains("noscreenname"))
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun if(m_backlights.size() >0){
84*4882a593Smuzhiyun screename = m_backlights.at(0)->screenName();
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun }else{
87*4882a593Smuzhiyun screename =app->primaryScreen()->name();
88*4882a593Smuzhiyun }
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun ui->comboBox->setCurrentText(screename);
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun //更该下默认屏幕.
94*4882a593Smuzhiyun ui->comboBox->currentTextChanged(screename);
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun connect(app, &QGuiApplication::screenAdded, this, [=](QScreen *screen){
97*4882a593Smuzhiyun ui->textBrowser->append(QString("screen add: %1").arg(screen->name()));
98*4882a593Smuzhiyun int index = ui->comboBox->findText(screen->name());
99*4882a593Smuzhiyun if(index !=-1)
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun ui->comboBox->removeItem(index);
102*4882a593Smuzhiyun }
103*4882a593Smuzhiyun });
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun connect(app, &QGuiApplication::screenRemoved, this, [=](QScreen *screen){
106*4882a593Smuzhiyun ui->textBrowser->append(QString("screen remove: %1").arg(screen->name()));
107*4882a593Smuzhiyun int index = ui->comboBox->findText(screen->name());
108*4882a593Smuzhiyun if(index !=-1)
109*4882a593Smuzhiyun {
110*4882a593Smuzhiyun ui->comboBox->removeItem(index);
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun });
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun if(m_backlights.size() <=0)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun ui->textBrowser->append("backling config is empty!");
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun connect(ui->horizontalSlider, &SliderWidget::valueChanged, this, [=](int value){
120*4882a593Smuzhiyun if(m_currentBacklight != NULL)
121*4882a593Smuzhiyun {
122*4882a593Smuzhiyun m_currentBacklight->setValue(value);
123*4882a593Smuzhiyun qCDebug(flapp)<<"set backligt value: "<< value;
124*4882a593Smuzhiyun system("sync");
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun ui->valueLbl->setText(QString::number(value));
128*4882a593Smuzhiyun });
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun if(m_currentBacklight != NULL)
131*4882a593Smuzhiyun {
132*4882a593Smuzhiyun int value = m_currentBacklight->getValue();
133*4882a593Smuzhiyun int min=0;
134*4882a593Smuzhiyun int max=0;
135*4882a593Smuzhiyun m_currentBacklight->getRange(min, max);
136*4882a593Smuzhiyun ui->minLbl->setText(QString::number(min));
137*4882a593Smuzhiyun ui->maxLbl->setText(QString::number(max));
138*4882a593Smuzhiyun ui->horizontalSlider->blockSignals(true);
139*4882a593Smuzhiyun ui->horizontalSlider->setRange(min, max);
140*4882a593Smuzhiyun ui->horizontalSlider->setValue(value);
141*4882a593Smuzhiyun ui->valueLbl->setText(QString::number(value));
142*4882a593Smuzhiyun ui->horizontalSlider->blockSignals(false);
143*4882a593Smuzhiyun }
144*4882a593Smuzhiyun }
145*4882a593Smuzhiyun
createColowWidget()146*4882a593Smuzhiyun void BacklightWidget::createColowWidget()
147*4882a593Smuzhiyun {
148*4882a593Smuzhiyun int space = this->height()/32; ;
149*4882a593Smuzhiyun ui->verticalLayout_4->setSpacing(space);
150*4882a593Smuzhiyun auto createCircle = [=](QWidget *p, const QColor &color){
151*4882a593Smuzhiyun p->setFixedSize(38, 38);
152*4882a593Smuzhiyun p->setAutoFillBackground(true);
153*4882a593Smuzhiyun QPixmap pixmap(p->size());
154*4882a593Smuzhiyun QPainter painter(&pixmap);
155*4882a593Smuzhiyun painter.setPen(color);
156*4882a593Smuzhiyun painter.setRenderHint(QPainter::Antialiasing);
157*4882a593Smuzhiyun QRect rect = p->rect();
158*4882a593Smuzhiyun rect =rect.adjusted(1,1,-1,-1);
159*4882a593Smuzhiyun QPalette backPaalette= this->palette();
160*4882a593Smuzhiyun painter.fillRect(p->rect(), backPaalette.brush(QPalette::Background));
161*4882a593Smuzhiyun painter.setBrush(color);
162*4882a593Smuzhiyun painter.drawEllipse(rect);
163*4882a593Smuzhiyun QPalette palette = p->palette();
164*4882a593Smuzhiyun palette.setBrush(QPalette::Background, pixmap);
165*4882a593Smuzhiyun p->setPalette(palette);
166*4882a593Smuzhiyun };
167*4882a593Smuzhiyun createCircle(ui->redWidget, Qt::red);
168*4882a593Smuzhiyun createCircle(ui->greenWidget, Qt::green);
169*4882a593Smuzhiyun createCircle(ui->blueWidget, Qt::blue);
170*4882a593Smuzhiyun }
171*4882a593Smuzhiyun
id()172*4882a593Smuzhiyun QString BacklightWidget::id()
173*4882a593Smuzhiyun {
174*4882a593Smuzhiyun return "screen";
175*4882a593Smuzhiyun }
176*4882a593Smuzhiyun
loadData(const QDomElement & head,const QDomElement & body)177*4882a593Smuzhiyun void BacklightWidget::loadData(const QDomElement &head, const QDomElement &body)
178*4882a593Smuzhiyun {
179*4882a593Smuzhiyun Q_UNUSED(body)
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun Backlight *backlight;
182*4882a593Smuzhiyun for(int i=0; i<head.childNodes().size(); i++)
183*4882a593Smuzhiyun {
184*4882a593Smuzhiyun QDomElement e = head.childNodes().at(i).toElement();
185*4882a593Smuzhiyun QString devName = e.attribute("devName");
186*4882a593Smuzhiyun QString screenName = e.attribute("screenName");
187*4882a593Smuzhiyun int min = e.attribute("min").toInt();
188*4882a593Smuzhiyun int max = e.attribute("max").toInt();
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun if(SystemManager::instance()->platformInfo().contains("t507"))
191*4882a593Smuzhiyun {
192*4882a593Smuzhiyun backlight = new T507(devName, screenName, min, max);
193*4882a593Smuzhiyun }else{
194*4882a593Smuzhiyun backlight = new Backlight(devName,screenName, min, max);
195*4882a593Smuzhiyun }
196*4882a593Smuzhiyun m_backlights << backlight;
197*4882a593Smuzhiyun }
198*4882a593Smuzhiyun }
199