Ejemplo n.º 1
0
QString Items::getTilesetToolTip(int itemType, unsigned long ItemID, QGraphicsScene *scene)
{
    LvlScene *scene_lvl = dynamic_cast<LvlScene *>(scene);
    WldScene *scene_wld = dynamic_cast<WldScene *>(scene);
    dataconfigs &config = MainWinConnect::pMainWin->configs;
    switch(itemType)
    {
    case ItemTypes::LVL_Block:
    {
        PGE_DataArray<obj_block> *array = scene_lvl ? &scene_lvl->m_localConfigBlocks : &config.main_block;
        return makeToolTipForTileset("block", (*array)[ItemID].setup);
    }
    case ItemTypes::LVL_BGO:
    {
        PGE_DataArray<obj_bgo> *array = scene_lvl ? &scene_lvl->m_localConfigBGOs : &config.main_bgo;
        return makeToolTipForTileset("bgo", (*array)[ItemID].setup);
    }
    case ItemTypes::LVL_NPC:
    {
        PGE_DataArray<obj_npc> *array = scene_lvl ? &scene_lvl->m_localConfigNPCs : &config.main_npc;
        return makeToolTipForTileset("npc", (*array)[ItemID].setup);
    }
    case ItemTypes::WLD_Tile:
    {
        PGE_DataArray<obj_w_tile> *array = scene_wld ? &scene_wld->m_localConfigTerrain : &config.main_wtiles;
        return makeToolTipSimple("Terrain tile", (*array)[ItemID].setup);
    }
    case ItemTypes::WLD_Scenery:
    {
        PGE_DataArray<obj_w_scenery> *array = scene_wld ? &scene_wld->m_localConfigScenery : &config.main_wscene;
        return makeToolTipSimple("Scenery", (*array)[ItemID].setup);
    }
    case ItemTypes::WLD_Path:
    {
        PGE_DataArray<obj_w_path> *array = scene_wld ? &scene_wld->m_localConfigPaths : &config.main_wpaths;
        return makeToolTipSimple("Path cell", (*array)[ItemID].setup);
    }
    case ItemTypes::WLD_Level:
    {
        PGE_DataArray<obj_w_level> *array = scene_wld ? &scene_wld->m_localConfigLevels : &config.main_wlevels;
        return makeToolTipSimple("Level entry point", (*array)[ItemID].setup);
    }
    default:
        break;
    }
    return "";
}
void WorldItemBox::initItemLists()
{
    if(mw()->activeChildWindow() != MainWindow::WND_World)
        return;

    WorldEdit *edit = mw()->activeWldEditWin();
    if((edit==NULL) || (!edit->sceneCreated))
        return;

    WldScene* scene = edit->scene;
    if(!scene)
        return;

    mw()->ui->menuNew->setEnabled(false);

    LogDebugQD("WorldTools -> Clear current");

    m_terrainModel->clear();
    m_sceneryModel->clear();
    m_pathsModel->clear();
    m_levelsModel->clear();
    m_musicboxModel->clear();

    LogDebugQD("WorldTools -> Declare new");


    LogDebug("LevelTools -> Fill list of Terrain tiles");
    {
        QSet<uint64_t> tilesCustomId;
        for(int i = 0; i < scene->m_customTerrain.size(); i++)
        {
            obj_w_tile &tiles = *scene->m_customTerrain[i];
            tilesCustomId.insert(tiles.setup.id);
        }

        m_terrainModel->addElementsBegin();
        m_terrainModel->setShowLabels(false);
        PGE_DataArray<obj_w_tile> *array = &scene->m_localConfigTerrain;
        {
            uint32_t rows = 0;
            uint32_t cols = 0;
            for(int i = 1; i < array->size(); i++)
            {
                obj_w_tile &tileItem = (*array)[i];
                if(rows < tileItem.setup.row)
                    rows = tileItem.setup.row;
                if(cols < tileItem.setup.col)
                    cols = tileItem.setup.col;
            }
            m_terrainModel->setTableMode(true, cols + 1, rows + 1);
        }

        for(int i = 1; i < array->size(); i++)
        {
            obj_w_tile &tileItem = (*array)[i];
            ItemBoxListModel::Element e;
            Items::getItemGFX(&tileItem, e.pixmap, false, QSize(32, 32));
            e.name = tileItem.setup.name.isEmpty() ? QString("tile-%1").arg(tileItem.setup.id) : tileItem.setup.name;
            e.description = makeToolTipSimple("Terrain tile", tileItem.setup);
            e.elementId = tileItem.setup.id;
            e.isCustom = tilesCustomId.contains(tileItem.setup.id);
            e.isValid = true;
            m_terrainModel->addElementCell(tileItem.setup.col, tileItem.setup.row, e, tileItem.setup.group, tileItem.setup.category);
        }
        m_terrainModel->addElementsEnd();
    }


    LogDebug("LevelTools -> Fill list of Sceneries");
    {
        QSet<uint64_t> sceneryCustomId;
        for(int i = 0; i < scene->m_customSceneries.size(); i++)
        {
            obj_w_scenery &scenery = *scene->m_customSceneries[i];
            sceneryCustomId.insert(scenery.setup.id);
        }
        m_sceneryModel->addElementsBegin();
        m_sceneryModel->setShowLabels(false);

        PGE_DataArray<obj_w_scenery> *array = &scene->m_localConfigScenery;
        for(int i = 1; i < array->size(); i++)
        {
            obj_w_scenery &sceneryItem = (*array)[i];
            ItemBoxListModel::Element e;
            Items::getItemGFX(&sceneryItem, e.pixmap, false, QSize(32, 32));
            e.name = sceneryItem.setup.name.isEmpty() ? QString("scene-%1").arg(sceneryItem.setup.id) : sceneryItem.setup.name;
            e.description = makeToolTipSimple("Scenery", sceneryItem.setup);
            e.elementId = sceneryItem.setup.id;
            e.isCustom = sceneryCustomId.contains(sceneryItem.setup.id);
            e.isValid = true;
            m_sceneryModel->addElement(e, sceneryItem.setup.group, sceneryItem.setup.category);
        }
        m_sceneryModel->addElementsEnd();
    }

    LogDebug("LevelTools -> Fill list of Path cells");
    {
        QSet<uint64_t> pathCustomId;
        for(int i = 0; i < scene->m_customPaths.size(); i++)
        {
            obj_w_path &paths = *scene->m_customPaths[i];
            pathCustomId.insert(paths.setup.id);
        }

        m_pathsModel->addElementsBegin();
        m_pathsModel->setShowLabels(false);
        PGE_DataArray<obj_w_path> *array = &scene->m_localConfigPaths;
        {
            uint32_t rows = 0;
            uint32_t cols = 0;
            for(int i = 1; i < array->size(); i++)
            {
                obj_w_path &pathItem = (*array)[i];
                if(rows < pathItem.setup.row)
                    rows = pathItem.setup.row;
                if(cols < pathItem.setup.col)
                    cols = pathItem.setup.col;
            }
            m_pathsModel->setTableMode(true, cols + 1, rows + 1);
        }

        for(int i = 1; i < array->size(); i++)
        {
            obj_w_path &pathItem = (*array)[i];
            ItemBoxListModel::Element e;
            Items::getItemGFX(&pathItem, e.pixmap, false, QSize(32, 32));
            e.name = pathItem.setup.name.isEmpty() ? QString("path-%1").arg(pathItem.setup.id) : pathItem.setup.name;
            e.description = makeToolTipSimple("Path cell", pathItem.setup);
            e.elementId = pathItem.setup.id;
            e.isCustom = pathCustomId.contains(pathItem.setup.id);
            e.isValid = true;
            m_pathsModel->addElementCell(pathItem.setup.col, pathItem.setup.row, e, pathItem.setup.group, pathItem.setup.category);
        }
        m_pathsModel->addElementsEnd();
    }

    LogDebug("LevelTools -> Fill list of Level cells");
    {
        QSet<uint64_t> levelCustomId;
        for(int i = 0; i < scene->m_customLevels.size(); i++)
        {
            obj_w_scenery &scenery = *scene->m_customLevels[i];
            levelCustomId.insert(scenery.setup.id);
        }

        m_levelsModel->addElementsBegin();
        m_levelsModel->setShowLabels(false);

        PGE_DataArray<obj_w_level> *array = &scene->m_localConfigLevels;
        for(int i = 0; i < array->size(); i++)
        {
            obj_w_level &levelItem = (*array)[i];
            ItemBoxListModel::Element e;
            Items::getItemGFX(&levelItem, e.pixmap, false, QSize(32, 32));
            e.name = levelItem.setup.name.isEmpty() ? QString("level-%1").arg(levelItem.setup.id) : levelItem.setup.name;
            e.description = makeToolTipSimple("Level entry point", levelItem.setup);
            e.elementId = levelItem.setup.id;
            e.isCustom = levelCustomId.contains(levelItem.setup.id);
            e.isValid = true;
            m_levelsModel->addElement(e, levelItem.setup.group, levelItem.setup.category);
        }
        m_levelsModel->addElementsEnd();
    }

    LogDebug("LevelTools -> Fill list of Music Boxes");
    {
        m_musicboxModel->addElementsBegin();
        for(int i = 1; i < mw()->configs.main_music_wld.size(); i++)
        {
            obj_music &musicItem = mw()->configs.main_music_wld[i];
            ItemBoxListModel::Element e;
            e.pixmap = QPixmap(":/images/playmusic.png");
            e.name = musicItem.name.isEmpty() ? QString("musicbox-%1").arg(musicItem.id) : musicItem.name;
            e.description = QString("ID: %1").arg(musicItem.id);
            e.elementId = musicItem.id;
            e.isCustom = false;
            e.isValid = true;
            m_musicboxModel->addElement(e);
        }
        m_musicboxModel->addElementsEnd();
    }

    mw()->ui->menuNew->setEnabled(true);
    LogDebugQD("WorldTools -> done");
}