Example #1
0
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;
}
Example #2
0
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);
    }
}