rk3568_ubuntu_r60_v1.3.2/app/qsetting/mainwindow.cpp
2023-11-03 06:12:44 +00:00

222 lines
6.7 KiB
C++
Executable File

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QDesktopWidget>
#include <QFileInfo>
#include <QHBoxLayout>
#include <QStandardPaths>
#include <QToolBar>
#include <QVBoxLayout>
#define USERDATA_SETTING_CFG "/userdata/setting.cfg"
#define HOME_SETTING_CFG QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/setting.cfg"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
resize(availableGeometry.width(), availableGeometry.height());
setMinimumWidth(availableGeometry.width());
audio = nullptr;
wifi = nullptr;
bt = nullptr;
update = nullptr;
factoryReset = nullptr;
getConfig();
returnBtn.setStyleSheet(tr("border-image: url(:/return.png);"));
QPixmap pixmap(":/return.png");
returnBtn.setFixedSize(pixmap.width(), pixmap.height());
QFont font;
title.setText("Setting");
font.setPixelSize(availableGeometry.height()/20);
title.setFont(font);
title.setAlignment(Qt::AlignLeft);
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->addWidget(&returnBtn);
hlayout->addWidget(&title);
hlayout->addWidget(&subTitle);
hlayout->addWidget(&toggleBtn);
font.setPixelSize(pixmap.height()*1/3);
subTitle.setFont(font);
subTitle.setAlignment(Qt::AlignCenter);
subTitle.setVisible(false);
font.setPixelSize(pixmap.height()/2);
toggleBtn.setFont(font);
toggleBtn.setFixedSize(pixmap.width(), pixmap.height());
toggleBtn.setVisible(false);
font.setPixelSize(availableGeometry.height()/20);
// QListWidgetItem *audio = new QListWidgetItem(tr("Audio"), &listWidget);
// audio->setFont(font);
QListWidgetItem *wifi = new QListWidgetItem(tr("WiFi"), &listWidget);
wifi->setFont(font);
QListWidgetItem *bt = new QListWidgetItem(tr("BT"), &listWidget);
bt->setFont(font);
QListWidgetItem *update = new QListWidgetItem(tr("Update"), &listWidget);
update->setFont(font);
QListWidgetItem *factory = new QListWidgetItem(tr("Factory Reset"), &listWidget);
factory->setFont(font);
listWidget.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
listWidget.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
stack.addWidget(&listWidget);
stack.setCurrentIndex(0);
QWidget *hWidget = new QWidget;
hWidget->setLayout(hlayout);
QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->addWidget(hWidget);
vlayout->addWidget(&stack);
QWidget *vWidget = new QWidget;
vWidget->setLayout(vlayout);
setCentralWidget(vWidget);
setStyleSheet("background-color:rgb(204,228,247)");
setWindowState(Qt::WindowMaximized);
setWindowFlags(Qt::FramelessWindowHint);
connect(&listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(on_itemClicked(QListWidgetItem *)));
connect(&returnBtn, SIGNAL(clicked(bool)), this, SLOT(on_returnClicked()));
}
MainWindow::~MainWindow()
{
}
QString MainWindow::saveConfig(int volume, int wifi, int bt)
{
QString path;
QFileInfo fi("/userdata");
if(fi.isDir()){
path = USERDATA_SETTING_CFG;
}else {
path = HOME_SETTING_CFG;
}
QFile file(path);
if(! file.open(QIODevice::ReadWrite | QIODevice::Text)){
qDebug() << "open rw setting.cfg failed";
return nullptr;
}
QTextStream out(&file);
out << "volume = " + QString::number(volume) << endl;
out << "isWifiOn = " + QString::number(wifi) << endl;
out << "isBtOn = " + QString::number(bt) << endl;
out.flush();
file.close();
return path;
}
int MainWindow::getValue(QTextStream *in, QString text)
{
in->seek(0);
do {
QString temp = in->readLine();
if(temp.startsWith(text)){
int size = text.count();
QString result = temp.mid(size, temp.count());
return result.toInt();
}
}while (! in->atEnd());
return -1;
}
void MainWindow::getConfig()
{
QString path;
if(QFile::exists(USERDATA_SETTING_CFG)){
path = USERDATA_SETTING_CFG;
}else if(QFile::exists(HOME_SETTING_CFG)){
path = HOME_SETTING_CFG;
}else {
path = saveConfig(100, 0, 0);
}
QFile file(path);
if(! file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug() << "open ro setting.cfg failed";
return;
}
QTextStream in(&file);
volume = getValue(&in, "volume = ");
isWifiOn = getValue(&in, "isWifiOn = ");
isBtOn = getValue(&in, "isBtOn = ");
}
void MainWindow::on_itemClicked(QListWidgetItem *item)
{
title.setText(item->text());
if(! item->text().compare("Audio")){
audio = new qtAudio(this);
stack.addWidget(audio);
stack.setCurrentIndex(stack.indexOf(audio));
} else if(! item->text().compare("WiFi")){
wifi = qtWifi::getInstance(this, &subTitle, &toggleBtn, isWifiOn);
stack.addWidget(wifi);
stack.setCurrentIndex(stack.indexOf(wifi));
} else if(! item->text().compare("BT")){
bt = qtBT::getInstance(this, &subTitle, &toggleBtn, isBtOn);
stack.addWidget(bt);
stack.setCurrentIndex(stack.indexOf(bt));
} else if(! item->text().compare("Update")){
update = new qtUpdate(this);
stack.addWidget(update);
stack.setCurrentIndex(stack.indexOf(update));
} else if(! item->text().compare("Factory Reset")){
factoryReset = new qtFactoryReset(this);
stack.addWidget(factoryReset);
stack.setCurrentIndex(stack.indexOf(factoryReset));
}
}
void MainWindow::on_returnClicked()
{
if(title.text() == "Setting"){
if(bt){
isBtOn = bt->isOn();
delete bt;
bt = nullptr;
}
saveConfig(volume, isWifiOn, isBtOn);
qApp->exit(0);
}else {
title.setText("Setting");
if(audio){
stack.removeWidget(audio);
delete audio;
audio = nullptr;
}else if(wifi){
stack.removeWidget(wifi);
isWifiOn = wifi->isOn();
delete wifi;
wifi = nullptr;
}else if(bt){
stack.removeWidget(bt);
isBtOn = bt->isOn();
delete bt;
bt = nullptr;
}else if(update){
stack.removeWidget(update);
delete update;
update = nullptr;
}else if(factoryReset){
stack.removeWidget(factoryReset);
delete factoryReset;
factoryReset = nullptr;
}
stack.setCurrentIndex(stack.indexOf(&listWidget));
}
}