/** * @brief Shows a tab to edit the specified resource element. * @param quest A Solarus quest. * @param resource_type A type of resource. * @param id Id of the resource element to open in this quest. */ void EditorTabs::open_resource( Quest& quest, ResourceType resource_type, const QString& id) { switch (resource_type) { case ResourceType::MAP: // Open the map data file. open_map_editor(quest, quest.get_map_data_file_path(id)); break; case ResourceType::TILESET: // Open the tileset data file. open_tileset_editor(quest, quest.get_tileset_data_file_path(id)); break; case ResourceType::LANGUAGE: // Open the dialogs file. open_dialogs_editor(quest, id); break; case ResourceType::SPRITE: // Open the sprite file. open_sprite_editor(quest, quest.get_sprite_path(id)); break; case ResourceType::ITEM: // Open the item script. open_text_editor(quest, quest.get_item_script_path(id)); break; case ResourceType::ENEMY: // Open the enemy script. open_text_editor(quest, quest.get_enemy_script_path(id)); break; case ResourceType::ENTITY: // Open the custom entity model script. open_text_editor(quest, quest.get_entity_script_path(id)); break; case ResourceType::MUSIC: case ResourceType::SOUND: case ResourceType::FONT: // These resource types cannot be edited. break; } }
/** * @brief Creates a sprite model. * @param quest The quest. * @param sprite_id Id of the sprite to manage. * @param parent The parent object or nullptr. * @throws EditorException If the file could not be opened. */ SpriteModel::SpriteModel( Quest& quest, const QString& sprite_id, QObject* parent) : QAbstractItemModel(parent), quest(quest), sprite_id(sprite_id), selection_model(this) { // Load the sprite data file. QString path = quest.get_sprite_path(sprite_id); if (!sprite.import_from_file(path.toStdString())) { throw EditorException(tr("Cannot open sprite '%1'").arg(path)); } // Build the index map of animations. build_index_map(); // Create animations and directions models. for (const auto& kvp : names_to_indexes) { const QString& animation_name = kvp.first; AnimationModel animation(animation_name); int num_dir = get_animation(animation_name).get_num_directions(); for (int nb = 0; nb < num_dir; nb++) { animation.directions.append(DirectionModel(animation_name, nb)); } animations.append(animation); } // use the first tileset of the quest QStringList tilesets = quest.get_resources().get_elements(ResourceType::TILESET); if (tilesets.size() > 0) { tileset_id = tilesets[0]; } }