ukui-screensaver/screensaver/scconfiguration.cpp

328 lines
8.9 KiB
C++

/*
* Copyright (C) 2023, KylinSoft Co., Ltd.
*
* 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 3, 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, see <http://www.gnu.org/licenses/>.
*
**/
#include "scconfiguration.h"
#include "commonfunc.h"
#include <QDebug>
#include <QSettings>
#include <QGSettings>
#include <QString>
#ifdef KDKINFO_FOUND
#include <kysdk/kysdk-system/libkysysinfo.h>
#endif
#include <QScreen>
#include <QApplication>
#include "glibinterface.h"
#define GSETTINGS_SCHEMA_SCREENSAVER "org.ukui.screensaver"
#define GSETTINGS_SCHEMA_MATE_BACKGROUND "org.mate.background"
#define GSETTINGS_SCHEMA_SCREENSAVER_DEFAULT "org.ukui.screensaver-default"
#define TIME_TYPE_SCHEMA "org.ukui.control-center.panel.plugins"
#define GSETTINGS_SCHEMA_STYLE "org.ukui.style"
SCConfiguration* SCConfiguration::instance_ = nullptr;
SCConfiguration::SCConfiguration(QObject *parent) :
QObject(parent),
mgsettings(nullptr),
ukgsettings(nullptr),
udgsettings(nullptr),
timegsettings(nullptr),
stygsettings(nullptr)
{
initGsettings();
}
SCConfiguration* SCConfiguration::instance(QObject *parent)
{
if(instance_ == nullptr)
instance_ = new SCConfiguration(parent);
return instance_;
}
void SCConfiguration::initGsettings()
{
if(QGSettings::isSchemaInstalled(GSETTINGS_SCHEMA_MATE_BACKGROUND))
mgsettings = new QGSettings(GSETTINGS_SCHEMA_MATE_BACKGROUND, "", this);
if(QGSettings::isSchemaInstalled(GSETTINGS_SCHEMA_SCREENSAVER))
ukgsettings = new QGSettings(GSETTINGS_SCHEMA_SCREENSAVER, "", this);
if(QGSettings::isSchemaInstalled(GSETTINGS_SCHEMA_SCREENSAVER_DEFAULT))
udgsettings = new QGSettings(GSETTINGS_SCHEMA_SCREENSAVER_DEFAULT,"",this);
if(QGSettings::isSchemaInstalled(TIME_TYPE_SCHEMA))
timegsettings = new QGSettings(TIME_TYPE_SCHEMA,"",this);
if(QGSettings::isSchemaInstalled(GSETTINGS_SCHEMA_STYLE))
stygsettings = new QGSettings(GSETTINGS_SCHEMA_STYLE, "", this);
connect(udgsettings, &QGSettings::changed,
this, &SCConfiguration::onConfigurationChanged);
connect(ukgsettings, &QGSettings::changed,
this, &SCConfiguration::onConfigurationChanged);
connect(timegsettings, &QGSettings::changed,
this, &SCConfiguration::onConfigurationChanged);
connect(stygsettings, &QGSettings::changed,
this, &SCConfiguration::onConfigurationChanged);
}
void SCConfiguration::initDefaultSettings()
{
}
void SCConfiguration::onConfigurationChanged(QString key)
{
if(key == "cycleTime"){
int cycleTime = getCycleTime();
Q_EMIT cycleTimeChanged(cycleTime);
}else if(key == "automaticSwitchingEnabled"){
bool changed = getAutoSwitch();
Q_EMIT autoSwitchChanged(changed);
}else if(key == "backgroundPath"){
QString path = getBackgroundPath();
Q_EMIT backgroundPathChanged(path);
}else if(key == "mytext"){
QString text = getMyText();
Q_EMIT myTextChanged(text);
}else if(key == "showCustomRestTime"){
bool ret = getCShowRestTime();
Q_EMIT showCRestTimeChanged(ret);
}else if(key == "showUkuiRestTime"){
bool ret = getUShowRestTime();
Q_EMIT showURestTimeChanged(ret);
}else if(key == "textIsCenter"){
bool ret = getTextIsCenter();
Q_EMIT textIsCenterChanged(ret);
}else if(key == "showMessageEnabled"){
bool ret = getMessageShowEnable();
Q_EMIT messageShowEnableChanged(ret);
}else if(key == "messageNumber"){
int num = getMessageNumber();
Q_EMIT messageNumberChanged(num);
}else if(key == "hoursystem"){
int timeType = timegsettings->get("hoursystem").toInt();
Q_EMIT timeTypeChanged(timeType);
}else if(key == "type"){
QString dateType = timegsettings->get("date").toString();
Q_EMIT dateTypeChanged(dateType);
}else if(key == "menuTransparency"){
int blur_Num = stygsettings->get("menuTransparency").toInt();
Q_EMIT blurChanged(blur_Num);
}else if(key == "styleName"){
QString m_curStyle = stygsettings->get("styleName").toString();
Q_EMIT styleChanged(m_curStyle);
} else if (key == "systemFontSize") {
double m_curFontSize = stygsettings->get("systemFontSize").toDouble();
qDebug() << "curFontSize = " << m_curFontSize ;
Q_EMIT fontSizeChanged(m_curFontSize);
}
}
QString SCConfiguration::getDefaultBackground()
{
QString backgroundFile = "";
if(ukgsettings){
backgroundFile = ukgsettings->get("background").toString();
}
if(ispicture(backgroundFile)) {
return backgroundFile;
} else {
#ifdef KDKINFO_FOUND
char *systemName = kdk_system_get_systemName();
#else
char *systemName = "none";
#endif
if (systemName) {
if (QString(systemName) == "openKylin") {
free(systemName);
return "/usr/share/backgrounds/1-openkylin.jpg";
}
free(systemName);
}
return "/usr/share/backgrounds/1-warty-final-ubuntukylin.jpg";
}
}
int SCConfiguration::getTimeType()
{
int timeType = 24;
if(timegsettings){
QStringList keys = timegsettings->keys();
if (keys.contains("hoursystem")) {
timeType = timegsettings->get("hoursystem").toInt();
}
}
return timeType;
}
QString SCConfiguration::getDateType()
{
QString dateType = "cn";
if(timegsettings){
QStringList keys = timegsettings->keys();
if (keys.contains("date")) {
dateType = timegsettings->get("date").toString();
}
}
return dateType;
}
int SCConfiguration::getFontSize()
{
double fontSize = 0;
if(stygsettings){
QStringList keys = stygsettings->keys();
if (keys.contains("systemFontSize")) {
fontSize = stygsettings->get("systemFontSize").toDouble();
}
}
double defaultFontSize = getDefaultFontSize();
qDebug()<<"defaultFontSize = "<<defaultFontSize;
return fontSize - defaultFontSize;
}
double SCConfiguration::getPtToPx()
{
double m_ptTopx = 1.0;
if (QApplication::primaryScreen()->logicalDotsPerInch() > 0)
m_ptTopx = 72/(QApplication::primaryScreen()->logicalDotsPerInch());
return m_ptTopx;
}
bool SCConfiguration::getAutoSwitch()
{
bool ret = false;
if(udgsettings){
ret = udgsettings->get("automatic-switching-enabled").toBool();
}
return ret;
}
bool SCConfiguration::getIsCustom()
{
bool ret = false;
if(ukgsettings){
ret = (ukgsettings->get("mode").toString() == "default-ukui-custom");
}
return ret;
}
bool SCConfiguration::getMessageShowEnable()
{
bool ret = false;
if(ukgsettings){
ret = ukgsettings->get("show-message-enabled").toBool();
}
return ret;
}
int SCConfiguration::getMessageNumber()
{
bool ret = false;
if(ukgsettings){
ret = (ukgsettings->get("mode").toString() == "default-ukui-custom");
}
return ret;
}
bool SCConfiguration::getCShowRestTime()
{
bool ret = true;
if(udgsettings){
QStringList keys = udgsettings->keys();
ret = udgsettings->get("show-custom-rest-time").toBool();
}
return ret;
}
bool SCConfiguration::getUShowRestTime()
{
bool ret = true;
if(udgsettings){
QStringList keys = udgsettings->keys();
ret = udgsettings->get("show-ukui-rest-time").toBool();
}
return ret;
}
int SCConfiguration::getCycleTime()
{
int cycleTime = 300;
if(udgsettings){
cycleTime = udgsettings->get("cycle-time").toInt();
}
return cycleTime;
}
QString SCConfiguration::getBackgroundPath()
{
QString backgroundPath = "/usr/share/backgrounds";
if(udgsettings){
backgroundPath = udgsettings->get("background-path").toString();
}
return backgroundPath;
}
bool SCConfiguration::getTextIsCenter()
{
bool ret = true;
if(udgsettings){
ret = udgsettings->get("text-is-center").toBool();
}
return ret;
}
QString SCConfiguration::getMyText()
{
QString myText = "";
if(udgsettings){
myText = udgsettings->get("mytext").toString();
}
return myText;
}
int SCConfiguration::getBlurNumber()
{
int blurNum = 50;
if(stygsettings){
blurNum = stygsettings->get("menu-transparency").toInt();
qDebug()<<"????nm"<<blurNum;
}
return blurNum;
}
QString SCConfiguration::getcurStyle()
{
QString curStyle;
if(stygsettings){
curStyle = stygsettings->get("style-name").toString();
}
return curStyle;
}