123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #include "skin.h"
- #include "aconfig.h"
- #include "filesystem.h"
- #include "mainwindow.h"
- #include <QPushButton>
- #include <QString>
- #include <QDesktopWidget>
- #include <QApplication>
- #include <QLabel>
- #include <QBitmap>
- #include <QMovie>
- Skin::Skin(QObject *parent) : QObject(parent) {
- }
- QString Skin::getSkinFile(){
- QString current_theme = QApplication::applicationDirPath() + "/styles/" + AConfig::getInstance()->getValue("Global", "current_theme") + "/skin.ini";
- QString default_theme = QApplication::applicationDirPath() + "/styles/" + AConfig::getInstance()->getValue("Global", "default_theme") + "/skin.ini";
- QString skinfile = FileSystem::fileExists(current_theme) ? current_theme : default_theme;
- return skinfile;
- }
- QString Skin::getSkinName(){
- QString current_theme = AConfig::getInstance()->getValue("Global", "current_theme");
- QString default_theme = AConfig::getInstance()->getValue("Global", "default_theme");
- QString path = QApplication::applicationDirPath() + "/styles/" + current_theme + "/skin.ini";
- QString skinname = FileSystem::fileExists(path) ? current_theme : default_theme;
- return skinname;
- }
- void Skin::loadSkin(){
- qInfo("Загружаем скин лаунчера");
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Определяем активную тему оформления");
- QSettings settings( getSkinFile(), QSettings::IniFormat );
- QStringList items = settings.childGroups();
- QVariant k;
- QPushButton butt;
- QLabel lab;
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Начинаем настройку элементов");
- foreach (QString item, items){
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Устанавливаем настройки для ", item.toStdString().c_str());
- MainWindow *a = MainWindow::getInstance();
- QWidget* obj = a->findChild<QWidget*>(item);
- if (obj != nullptr){
- obj->installEventFilter(MainWindow::getInstance());
- settings.beginGroup(item);
- if(settings.value("left").toString() != "-1"){
- obj->setGeometry(QRect(
- settings.value("left").toInt(),
- settings.value("top").toInt(),
- settings.value("width").toInt(),
- settings.value("height").toInt()
- ));
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": настройка геометрии завершена");
- if(settings.value("shadow") != k){
- QString color = settings.value("shcolor") != k ? settings.value("shcolor").toString() : "#222";
- int blur = settings.value("shblur") != k ? settings.value("shblur").toInt() : 2;
- int offset_x = settings.value("shx") != k ? settings.value("shx").toInt() : 1;
- int offset_y = settings.value("shy") != k ? settings.value("shy").toInt() : 1;
- MainWindow::getInstance()->applyShadow(obj, color, blur, offset_x, offset_y);
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": настройка теней завершена");
- if(settings.value("text") != k){
- QString text = settings.value("text").toString();
- if(text == "del") text = "";
- if(obj->metaObject()->className() == butt.metaObject()->className()){
- QPushButton * b = dynamic_cast<QPushButton* >(obj);
- b->setText(text);
- }
- if(obj->metaObject()->className() == lab.metaObject()->className()){
- QLabel * l = dynamic_cast<QLabel* >(obj);
- l->setText(settings.value("text").toString());
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": текст установлен");
- }
- if(settings.value("align") != k){
- QLabel * lab = dynamic_cast<QLabel* >(obj);
- if(settings.value("align") == "left") lab->setAlignment(Qt::AlignLeft);
- if(settings.value("align") == "center") lab->setAlignment(Qt::AlignCenter);
- if(settings.value("align") == "right") lab->setAlignment(Qt::AlignRight);
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": настройки позиционирования применены");
- settings.endGroup();
- } else {
- if(item == "mainWindow") {
- settings.beginGroup(item);
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": обработка параметров главного окна");
- int w = settings.value("width").toInt();
- int h = settings.value("height").toInt();
- QDesktopWidget desktop;
- QRect rect = desktop.availableGeometry(desktop.primaryScreen()); // прямоугольник с размерами экрана
- QPoint center = rect.center(); //координаты центра экрана
- int x = center.x() - (w / 2); // учитываем половину ширины окна
- int y = center.y() - (h / 2); // .. половину высоты
- center.setX(x);
- center.setY(y);
- MainWindow::getInstance()->move(center);
- settings.endGroup();
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": закончен просчет геометрии");
- if(item == "htmlColors") {
- settings.beginGroup(item);
- foreach(QString key, settings.allKeys()){
- MainWindow::getInstance()->htmlColors.insert(key, settings.value(key).toString());
- }
- settings.endGroup();
- }
- qInfo("%s:%i: %s%s", __FILE__, __LINE__, item.toStdString().c_str(), ": загружены HTML-цвета");
- }
- }
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено.");
- }
- void Skin::findSkins(){
- qInfo("Темы оформления");
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Производим поиск доступных тем.");
- QDir dir(QApplication::applicationDirPath() + "/styles");
- QStringList skins = dir.entryList(QDir::Dirs | QDir::AllDirs | QDir::NoDotAndDotDot);
- MainWindow::getInstance()->ui->skinSelect->addItems(skins);
- QString skinname = AConfig::getInstance()->getValue("Global", "current_theme");
- MainWindow::getInstance()->ui->skinSelect->setCurrentText(skinname);
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Устанавливаем отметку о файле локализации.");
- QString file = AConfig::getInstance()->getValue("Local", "file");
- if(file == "client_local_English.dat") MainWindow::getInstance()->ui->enButton->setEnabled(false);
- if(file == "client_local_DE.dat") MainWindow::getInstance()->ui->deButton->setEnabled(false);
- if(file == "client_local_FR.dat") MainWindow::getInstance()->ui->frButton->setEnabled(false);
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено.");
- }
- void Skin::replaceSkin(QString name){
- QString text = "Смена темы оформления";
- QString info = "Выбрана тема " + name + ". Изменения вступят в силу при следующем запуске лаунчера.";
- //app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "", "", 400, 120, true, false);
- qInfo("%s:%i: %s", __FILE__, __LINE__, "Оформляем главное окно.");
- QFile styleF;
- QString skin = getSkinName();
- styleF.setFileName(QApplication::applicationDirPath() + "styles/" + name + "/style.css");
- styleF.open(QFile::ReadOnly);
- QString qssStr = styleF.readAll();
- qApp->setStyleSheet(qssStr);
- QPixmap maskPix(":/res/styles/" + name + "/bg.png");
- QPixmap maskPixLocal(QApplication::applicationDirPath() + "styles/" + name + "/bg.png");
- maskPix = maskPix.isNull() ? maskPixLocal : maskPix;
- MainWindow::getInstance()->setMask(maskPix.mask());
- QString color = MainWindow::getInstance()->htmlColors.contains("a") ? MainWindow::getInstance()->htmlColors.lowerBound("a").value() : "blue";
- loadSkin();
- QString hrefcolor = MainWindow::getInstance()->htmlColors.contains("a") ? MainWindow::getInstance()->htmlColors.lowerBound("a").value() : "blue";
- QString newtext = MainWindow::getInstance()->ui->news1Title->text().replace(color, hrefcolor);
- MainWindow::getInstance()->ui->news1Title->setText(newtext);
- newtext = MainWindow::getInstance()->ui->news2Title->text().replace(color, hrefcolor);
- MainWindow::getInstance()->ui->news2Title->setText(newtext);
- newtext = MainWindow::getInstance()->ui->news3Title->text().replace(color, hrefcolor);
- MainWindow::getInstance()->ui->news3Title->setText(newtext);
- newtext = MainWindow::getInstance()->ui->news4Title->text().replace(color, hrefcolor);
- MainWindow::getInstance()->ui->news4Title->setText(newtext);
- MainWindow::getInstance()->loadHelp();
- QMovie * movie = new QMovie(":/res/styles/" + skin + "/loader.gif");
- if(!movie->isValid()) movie = new QMovie(QApplication::applicationDirPath() + "styles/" + skin + "/loader.gif");
- MainWindow::getInstance()->ui->loader->setMovie(movie);
- movie->setScaledSize(QSize(MainWindow::getInstance()->ui->loader->width(), MainWindow::getInstance()->ui->loader->height()));
- movie->start();
- }
|