xref: /OK3568_Linux_fs/app/qsetting/mainwindow.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "mainwindow.h"
2 #include <QApplication>
3 #include <QDebug>
4 #include <QDesktopWidget>
5 #include <QFileInfo>
6 #include <QHBoxLayout>
7 #include <QStandardPaths>
8 #include <QToolBar>
9 #include <QVBoxLayout>
10 
11 #define USERDATA_SETTING_CFG "/userdata/setting.cfg"
12 #define HOME_SETTING_CFG QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/setting.cfg"
13 
MainWindow(QWidget * parent)14 MainWindow::MainWindow(QWidget *parent)
15     : QMainWindow(parent)
16 {
17     const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
18     resize(availableGeometry.width(), availableGeometry.height());
19     setMinimumWidth(availableGeometry.width());
20 
21     audio = nullptr;
22     wifi = nullptr;
23     bt = nullptr;
24     update = nullptr;
25     factoryReset = nullptr;
26 
27     getConfig();
28 
29     returnBtn.setStyleSheet(tr("border-image: url(:/return.png);"));
30     QPixmap pixmap(":/return.png");
31     returnBtn.setFixedSize(pixmap.width(), pixmap.height());
32 
33     QFont font;
34     title.setText("Setting");
35     font.setPixelSize(availableGeometry.height()/20);
36     title.setFont(font);
37     title.setAlignment(Qt::AlignLeft);
38 
39 
40     QHBoxLayout *hlayout = new QHBoxLayout;
41     hlayout->addWidget(&returnBtn);
42     hlayout->addWidget(&title);
43     hlayout->addWidget(&subTitle);
44     hlayout->addWidget(&toggleBtn);
45     font.setPixelSize(pixmap.height()*1/3);
46     subTitle.setFont(font);
47     subTitle.setAlignment(Qt::AlignCenter);
48     subTitle.setVisible(false);
49     font.setPixelSize(pixmap.height()/2);
50     toggleBtn.setFont(font);
51     toggleBtn.setFixedSize(pixmap.width(), pixmap.height());
52     toggleBtn.setVisible(false);
53 
54     font.setPixelSize(availableGeometry.height()/20);
55 //    QListWidgetItem *audio = new QListWidgetItem(tr("Audio"), &listWidget);
56 //    audio->setFont(font);
57     QListWidgetItem *wifi = new QListWidgetItem(tr("WiFi"), &listWidget);
58     wifi->setFont(font);
59     QListWidgetItem *bt = new QListWidgetItem(tr("BT"), &listWidget);
60     bt->setFont(font);
61     QListWidgetItem *update = new QListWidgetItem(tr("Update"), &listWidget);
62     update->setFont(font);
63     QListWidgetItem *factory = new QListWidgetItem(tr("Factory Reset"), &listWidget);
64     factory->setFont(font);
65     listWidget.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
66     listWidget.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
67 
68     stack.addWidget(&listWidget);
69     stack.setCurrentIndex(0);
70 
71     QWidget *hWidget = new QWidget;
72     hWidget->setLayout(hlayout);
73 
74     QVBoxLayout *vlayout = new QVBoxLayout;
75     vlayout->addWidget(hWidget);
76     vlayout->addWidget(&stack);
77 
78     QWidget *vWidget = new QWidget;
79     vWidget->setLayout(vlayout);
80     setCentralWidget(vWidget);
81     setStyleSheet("background-color:rgb(204,228,247)");
82     setWindowState(Qt::WindowMaximized);
83     setWindowFlags(Qt::FramelessWindowHint);
84 
85     connect(&listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(on_itemClicked(QListWidgetItem *)));
86     connect(&returnBtn, SIGNAL(clicked(bool)), this, SLOT(on_returnClicked()));
87 }
88 
~MainWindow()89 MainWindow::~MainWindow()
90 {
91 
92 }
93 
saveConfig(int volume,int wifi,int bt)94 QString MainWindow::saveConfig(int volume, int wifi, int bt)
95 {
96     QString path;
97     QFileInfo fi("/userdata");
98     if(fi.isDir()){
99         path = USERDATA_SETTING_CFG;
100     }else {
101         path = HOME_SETTING_CFG;
102     }
103     QFile file(path);
104 
105     if(! file.open(QIODevice::ReadWrite | QIODevice::Text)){
106         qDebug() << "open rw setting.cfg failed";
107         return nullptr;
108     }
109     QTextStream out(&file);
110     out << "volume = " + QString::number(volume) << endl;
111     out << "isWifiOn = " + QString::number(wifi) << endl;
112     out << "isBtOn = " + QString::number(bt) << endl;
113     out.flush();
114     file.close();
115     return path;
116 }
117 
getValue(QTextStream * in,QString text)118 int MainWindow::getValue(QTextStream *in, QString text)
119 {
120     in->seek(0);
121     do {
122         QString temp = in->readLine();
123         if(temp.startsWith(text)){
124             int size = text.count();
125             QString result = temp.mid(size, temp.count());
126             return result.toInt();
127         }
128     }while (! in->atEnd());
129 
130     return -1;
131 }
132 
getConfig()133 void MainWindow::getConfig()
134 {
135     QString path;
136 
137     if(QFile::exists(USERDATA_SETTING_CFG)){
138         path = USERDATA_SETTING_CFG;
139     }else if(QFile::exists(HOME_SETTING_CFG)){
140         path = HOME_SETTING_CFG;
141     }else {
142         path = saveConfig(100, 0, 0);
143     }
144 
145     QFile file(path);
146     if(! file.open(QIODevice::ReadOnly | QIODevice::Text)){
147         qDebug() << "open ro setting.cfg failed";
148         return;
149     }
150     QTextStream in(&file);
151     volume = getValue(&in, "volume = ");
152     isWifiOn = getValue(&in, "isWifiOn = ");
153     isBtOn = getValue(&in, "isBtOn = ");
154 }
155 
156 
on_itemClicked(QListWidgetItem * item)157 void MainWindow::on_itemClicked(QListWidgetItem *item)
158 {
159     title.setText(item->text());
160 
161     if(! item->text().compare("Audio")){
162         audio = new qtAudio(this);
163         stack.addWidget(audio);
164         stack.setCurrentIndex(stack.indexOf(audio));
165     } else if(! item->text().compare("WiFi")){
166         wifi = qtWifi::getInstance(this, &subTitle, &toggleBtn, isWifiOn);
167         stack.addWidget(wifi);
168         stack.setCurrentIndex(stack.indexOf(wifi));
169     } else if(! item->text().compare("BT")){
170         bt = qtBT::getInstance(this, &subTitle, &toggleBtn, isBtOn);
171         stack.addWidget(bt);
172         stack.setCurrentIndex(stack.indexOf(bt));
173     } else if(! item->text().compare("Update")){
174         update = new qtUpdate(this);
175         stack.addWidget(update);
176         stack.setCurrentIndex(stack.indexOf(update));
177     } else if(! item->text().compare("Factory Reset")){
178         factoryReset = new qtFactoryReset(this);
179         stack.addWidget(factoryReset);
180         stack.setCurrentIndex(stack.indexOf(factoryReset));
181     }
182 }
183 
on_returnClicked()184 void MainWindow::on_returnClicked()
185 {
186     if(title.text() == "Setting"){
187         if(bt){
188             isBtOn = bt->isOn();
189             delete bt;
190             bt = nullptr;
191         }
192         saveConfig(volume, isWifiOn, isBtOn);
193         qApp->exit(0);
194     }else {
195         title.setText("Setting");
196         if(audio){
197             stack.removeWidget(audio);
198             delete audio;
199             audio = nullptr;
200         }else if(wifi){
201             stack.removeWidget(wifi);
202             isWifiOn = wifi->isOn();
203             delete wifi;
204             wifi = nullptr;
205         }else if(bt){
206             stack.removeWidget(bt);
207             isBtOn = bt->isOn();
208             delete bt;
209             bt = nullptr;
210         }else if(update){
211             stack.removeWidget(update);
212             delete update;
213             update = nullptr;
214         }else if(factoryReset){
215             stack.removeWidget(factoryReset);
216             delete factoryReset;
217             factoryReset = nullptr;
218         }
219         stack.setCurrentIndex(stack.indexOf(&listWidget));
220     }
221 }
222