bool ConfigManager::loadBasics() { QString gui_ini = config_dir + "main.ini"; QSettings guiset(gui_ini, QSettings::IniFormat); guiset.setIniCodec("UTF-8"); guiset.beginGroup("main"); { data_dir = (guiset.value("application-dir", "0").toBool() ? ApplicationPath + "/" : config_dir + "data/"); } guiset.endGroup(); errorsList.clear(); //dirs if((!QDir(config_dir).exists()) || (QFileInfo(config_dir).isFile())) { msgBox("Config error", QString("CONFIG DIR NOT FOUND AT: %1").arg(config_dir)); return false; } QString main_ini = config_dir + "main.ini"; if(!QFileInfo(main_ini).exists()) { msgBox("Config error", QString("Can't open the 'main.ini' config file!")); return false; } QSettings mainset(main_ini, QSettings::IniFormat); mainset.setIniCodec("UTF-8"); QString customAppPath = ApplicationPath; mainset.beginGroup("main"); { config_name = mainset.value("config_name").toString().toStdString(); customAppPath = mainset.value("application-path", ApplicationPath).toString(); customAppPath.replace('\\', '/'); bool appDir = mainset.value("application-dir", false).toBool(); data_dir = (appDir ? customAppPath + "/" : config_dir + "data/"); if(QDir(ApplicationPath + "/" + data_dir).exists()) //Check as relative data_dir = ApplicationPath + "/" + data_dir; else if(!QDir(data_dir).exists()) //Check as absolute { msgBox("Config error", QString("Config data path not exists: %1").arg(data_dir)); return false; } data_dir = QDir(data_dir).absolutePath() + "/"; QString url = mainset.value("home-page", "http://engine.wohlnet.ru/config_packs/").toString(); QString version = mainset.value("pge-engine-version", "0.0").toString(); bool ver_notify = mainset.value("enable-version-notify", true).toBool(); if(ver_notify && (version != VersionCmp::compare(QString("%1").arg(_LATEST_STABLE), version))) { std::string title = "Legacy configuration package"; std::string msg = QString("You have a legacy configuration package.\n" "Game will be started, but you may have a some problems with gameplay.\n\n" "Please download and install latest version of a configuration package:\n\n" "Download: %1\n" "Note: most of config packs are updates togeter with PGE,\n" "therefore you can use same link to get updated version") /*.arg("<a href=\"%1\">%1</a>")*/.arg(url).toStdString(); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING, title.c_str(), msg.c_str(), PGE_Window::window); QDesktopServices::openUrl(QUrl(url)); } if(appDir) dirs.worlds = customAppPath + "/" + mainset.value("worlds", config_id + "_worlds").toString() + "/"; else dirs.worlds = AppPathManager::userAppDir() + "/" + mainset.value("worlds", config_id + "_worlds").toString() + "/"; if(!QDir(dirs.worlds).exists()) QDir().mkpath(dirs.worlds); dirs.music = data_dir + mainset.value("music", "data/music").toString() + "/"; dirs.sounds = data_dir + mainset.value("sound", "data/sound").toString() + "/"; dirs.glevel = data_dir + mainset.value("graphics-level", "data/graphics/level").toString() + "/"; dirs.gworld = data_dir + mainset.value("graphics-worldmap", "data/graphics/worldmap").toString() + "/"; dirs.gplayble = data_dir + mainset.value("graphics-characters", "data/graphics/characters").toString() + "/"; dirs.gcommon = config_dir + "data/" + mainset.value("graphics-common", "data-custom").toString() + "/"; setup_Scripts.lvl_local = mainset.value("local-script-name-lvl", "level.lua").toString(); setup_Scripts.lvl_common = mainset.value("common-script-name-lvl", "level.lua").toString(); setup_Scripts.wld_local = mainset.value("local-script-name-wld", "world.lua").toString(); setup_Scripts.wld_common = mainset.value("common-script-name-wld", "world.lua").toString(); dirs.gcustom = data_dir + mainset.value("custom-data", "data-custom").toString() + "/"; } mainset.endGroup(); mainset.beginGroup("graphics"); { default_grid = mainset.value("default-grid", 32).toUInt(); } mainset.endGroup(); if(mainset.status() != QSettings::NoError) { msgBox("Config error", QString("ERROR LOADING main.ini N:%1").arg(mainset.status())); return false; } ////////////////////////////////Preparing//////////////////////////////////////// refreshPaths(); ////////////////////////////////////////////////////////////////////////////////// if(!loadEngineSettings()) //!< Load engine.ini file return false; if(!loadDefaultMusics()) return false; if(!loadDefaultSounds()) return false; if(!loadSoundRolesTable()) return false; /********Payable characters config should be loaded always!*******/ if(!loadPlayableCharacters()) //!< Load lvl_characters.ini file return false; return true; }
void ConfigManager::loadConfigPackList() { typedef QPair<QString, QString > configPackPair; QList<configPackPair > config_paths; QListWidgetItem *item; //! Stuff PGE config dir QString configPath = ApplicationPath + "/configs/"; //! User profile PGE config dir QString configPath_user = AppPathManager::userAppDir() + "/configs/"; //Create empty config directory if not exists if(!QDir(configPath).exists()) QDir().mkdir(configPath); if(AppPathManager::userDirIsAvailable()) { if(!QDir(configPath_user).exists()) QDir().mkdir(configPath_user); } if(QDir(configPath).exists()) { QDir configDir(configPath); QStringList configs = configDir.entryList(QDir::AllDirs); for(QString &cpName : configs) { QString config_dir = configPath + cpName + "/"; configPackPair path; path.first = cpName; //name of config dir path.second = config_dir; //Full path config_paths.append(path); } } if(AppPathManager::userDirIsAvailable()) { QDir configUserDir(configPath_user); QStringList configs = configUserDir.entryList(QDir::AllDirs); for(QString &cpName : configs) { QString config_dir = configPath_user + cpName + "/"; configPackPair path; path.first = cpName;//Name of config dir path.second = config_dir;//Full path config_paths << path; } } ui->configList->setItemDelegate(new ListDelegate(ui->configList)); ui->configList->setStyleSheet("* { paint-alternating-row-colors-for-empty-area: true; " "alternate-background-color: #2C2C2CFF; }"); for(configPackPair &confD : config_paths) { QString cpName = confD.first; QString cpFullDirPath = confD.second; QString configName; QString cpDesc; bool cpSmbx64Flag; QString data_dir; QString splash_logo; QString gui_ini = cpFullDirPath + "main.ini"; if(!QFileInfo(gui_ini).exists()) continue; //Skip if it is not a config pack directory QSettings guiset(gui_ini, QSettings::IniFormat); guiset.setIniCodec("UTF-8"); guiset.beginGroup("gui"); splash_logo = guiset.value("editor-splash", "").toString(); splash_logo = guiset.value("editor-icon", /* show splash if alternate icon is not defined */ splash_logo).toString(); m_themePackName = guiset.value("default-theme", "").toString(); guiset.endGroup(); guiset.beginGroup("main"); data_dir = (guiset.value("application-dir", "0").toBool() ? ApplicationPath + "/" : cpFullDirPath + "data/"); configName = guiset.value("config_name", QDir(cpFullDirPath).dirName()).toString(); cpDesc = guiset.value("config_desc", cpFullDirPath).toString(); cpSmbx64Flag = guiset.value("smbx-compatible", false).toBool(); guiset.endGroup(); QPixmap cpSplashImg; //Default splash image if(splash_logo.isEmpty()) splash_logo = ":/images/splash_editor.png"; else { splash_logo = data_dir + splash_logo; if(QPixmap(splash_logo).isNull()) splash_logo = ":/images/splash_editor.png"; } cpSplashImg.load(splash_logo); GraphicsHelps::squareImageR(cpSplashImg, QSize(70, 40)); item = new QListWidgetItem(configName); item->setData(Qt::DecorationRole, cpSplashImg); item->setData(CP_NAME_ROLE, cpName); item->setData(CP_DESC_ROLE, cpDesc); item->setData(CP_SMBX64FLAG_ROLE, cpSmbx64Flag); item->setData(CP_FULLDIR_ROLE, cpFullDirPath); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); ui->configList->addItem(item); } }