You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxqt-config-packaging/lxqt-config-monitor/savesettings.cpp

118 lines
4.3 KiB

/*
Copyright (C) 2015 P.L. Lucas <selairi@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QJsonArray>
#include <QJsonObject>
#include "savesettings.h"
#include "configure.h"
#include <QDebug>
#include <QJsonDocument>
#include <QProcess>
#include <QInputDialog>
SaveSettings::SaveSettings(LXQt::Settings*applicationSettings, QWidget* parent):
QDialog(parent) {
this->applicationSettings = applicationSettings;
ui.setupUi(this);
QSize size(128,64);
ui.save->setIcon(QIcon::fromTheme("document-save"));
ui.save->setIconSize(size);
connect(ui.hardwareCompatibleConfigs, SIGNAL(itemDoubleClicked(QListWidgetItem *)), SLOT(setSavedSettings(QListWidgetItem *)));
connect(ui.deletePushButton, SIGNAL(clicked()), SLOT(onDeleteItem()));
connect(ui.renamePushButton, SIGNAL(clicked()), SLOT(onRenameItem()));
loadSettings();
}
void SaveSettings::setHardwareIdentifier(QString hardwareIdentifier) {
this->hardwareIdentifier = hardwareIdentifier;
loadSettings();
}
void SaveSettings::setSavedSettings(QListWidgetItem * item) {
QJsonObject o = item->data(Qt::UserRole).toJsonObject();
QString cmd = o["command"].toString();
qDebug() << "[SaveSettings::setSavedSettings]: " << cmd;
QProcess::execute(cmd);
}
void SaveSettings::onDeleteItem() {
if( ui.allConfigs->currentItem() == NULL )
return;
QJsonObject obj = ui.allConfigs->currentItem()->data(Qt::UserRole).toJsonObject();
applicationSettings->beginGroup("configMonitor");
QJsonArray savedConfigs = QJsonDocument::fromJson(applicationSettings->value("saved").toByteArray()).array();
for(int i=0;i<savedConfigs.size();i++) {
const QJsonValue & v = savedConfigs[i];
QJsonObject o = v.toObject();
if( o["name"].toString() == obj["name"].toString() ) {
savedConfigs.removeAt(i);
break;
}
}
applicationSettings->setValue("saved", QVariant(QJsonDocument(savedConfigs).toJson()));
applicationSettings->endGroup();
loadSettings();
}
void SaveSettings::onRenameItem() {
if( ui.allConfigs->currentItem() == NULL )
return;
QJsonObject obj = ui.allConfigs->currentItem()->data(Qt::UserRole).toJsonObject();
bool ok;
QString configName = QInputDialog::getText(this, tr("Name"), tr("Name:"), QLineEdit::Normal, obj["name"].toString(), &ok);
if (!ok || configName.isEmpty())
return;
applicationSettings->beginGroup("configMonitor");
QJsonArray savedConfigs = QJsonDocument::fromJson(applicationSettings->value("saved").toByteArray()).array();
for(int i=0;i<savedConfigs.size();i++) {
const QJsonValue & v = savedConfigs[i];
QJsonObject o = v.toObject();
if( o["name"].toString() == obj["name"].toString() ) {
savedConfigs.removeAt(i);
obj["name"] = configName;
savedConfigs.append(obj);
break;
}
}
applicationSettings->setValue("saved", QVariant(QJsonDocument(savedConfigs).toJson()));
applicationSettings->endGroup();
loadSettings();
}
void SaveSettings::loadSettings() {
ui.allConfigs->clear();
ui.hardwareCompatibleConfigs->clear();
applicationSettings->beginGroup("configMonitor");
QJsonArray savedConfigs = QJsonDocument::fromJson(applicationSettings->value("saved").toByteArray()).array();
foreach (const QJsonValue & v, savedConfigs) {
QJsonObject o = v.toObject();
QListWidgetItem *item = new QListWidgetItem(o["name"].toString(), ui.allConfigs);
item->setData(Qt::UserRole, QVariant(o));
if(o["hardwareIdentifier"].toString() == hardwareIdentifier) {
QListWidgetItem *item = new QListWidgetItem(o["name"].toString(), ui.hardwareCompatibleConfigs);
item->setData(Qt::UserRole, QVariant(o));
}
}
applicationSettings->endGroup();
}