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