/* TextureXPanel::newTextureFromFile * Creates a new texture from an image file. The file will be * imported and added to the patch table if needed *******************************************************************/ void TextureXPanel::newTextureFromFile() { // Get all entry types vector<EntryType*> etypes = EntryType::allTypes(); // Go through types string ext_filter = "All files (*.*)|*.*|"; for (unsigned a = 0; a < etypes.size(); a++) { // If the type is a valid image type, add its extension filter if (etypes[a]->extraProps().propertyExists("image")) { ext_filter += etypes[a]->getFileFilterString(); ext_filter += "|"; } } // Create open file dialog wxFileDialog dialog_open(this, "Choose file(s) to open", dir_last, wxEmptyString, ext_filter, wxFD_OPEN|wxFD_MULTIPLE|wxFD_FILE_MUST_EXIST, wxDefaultPosition); // Run the dialog & check that the user didn't cancel if (dialog_open.ShowModal() == wxID_OK) { // Get file selection wxArrayString files; dialog_open.GetPaths(files); // Save 'dir_last' dir_last = dialog_open.GetDirectory(); // Go through file selection for (unsigned a = 0; a < files.size(); a++) { // Load the file into a temporary ArchiveEntry ArchiveEntry* entry = new ArchiveEntry(); entry->importFile(files[a]); // Determine type EntryType::detectEntryType(entry); // If it's not a valid image type, ignore this file if (!entry->getType()->extraProps().propertyExists("image")) { wxLogMessage("%s is not a valid image file", files[a]); continue; } // Ask for name for texture wxFileName fn(files[a]); string name = fn.GetName().Upper().Truncate(8); name = wxGetTextFromUser(S_FMT("Enter a texture name for %s:", fn.GetFullName()), "New Texture", name); name = name.Truncate(8); // Add patch to archive entry->setName(name); entry->setExtensionByType(); tx_entry->getParent()->addEntry(entry, "patches"); // Add patch to patch table if needed if (texturex.getFormat() != TXF_TEXTURES) tx_editor->patchTable().addPatch(name); // Create new texture from patch CTexture* tex = newTextureFromPatch(name, name); // Add texture after the last selected item int selected = list_textures->getLastSelected(); if (selected == -1) selected = texturex.nTextures() - 1; // Add to end of the list if nothing selected texturex.addTexture(tex, selected + 1); // Record undo level undo_manager->beginRecord("New Texture from File"); undo_manager->recordUndoStep(new TextureCreateDeleteUS(this, tex, true)); undo_manager->endRecord(true); // Update texture list list_textures->updateList(); // Select the new texture list_textures->clearSelection(); list_textures->selectItem(selected + 1); list_textures->EnsureVisible(selected + 1); // Update patch table counts tx_editor->patchTable().updatePatchUsage(tex); } } }
/* PatchTablePanel::onBtnPatchFromFile * Called when the 'New Patch from File' button is clicked *******************************************************************/ void PatchTablePanel::onBtnPatchFromFile(wxCommandEvent& e) { // Get all entry types vector<EntryType*> etypes = EntryType::allTypes(); // Go through types string ext_filter = "All files (*.*)|*.*|"; for (unsigned a = 0; a < etypes.size(); a++) { // If the type is a valid image type, add its extension filter if (etypes[a]->extraProps().propertyExists("image")) { ext_filter += etypes[a]->getFileFilterString(); ext_filter += "|"; } } // Create open file dialog wxFileDialog dialog_open(this, "Choose file(s) to open", dir_last, wxEmptyString, ext_filter, wxFD_OPEN|wxFD_MULTIPLE|wxFD_FILE_MUST_EXIST, wxDefaultPosition); // Run the dialog & check that the user didn't cancel if (dialog_open.ShowModal() == wxID_OK) { // Get file selection wxArrayString files; dialog_open.GetPaths(files); // Save 'dir_last' dir_last = dialog_open.GetDirectory(); // Go through file selection for (unsigned a = 0; a < files.size(); a++) { // Load the file into a temporary ArchiveEntry ArchiveEntry* entry = new ArchiveEntry(); entry->importFile(files[a]); // Determine type EntryType::detectEntryType(entry); // If it's not a valid image type, ignore this file if (!entry->getType()->extraProps().propertyExists("image")) { wxLogMessage("%s is not a valid image file", files[a]); continue; } // Ask for name for patch wxFileName fn(files[a]); string name = fn.GetName().Upper().Truncate(8); name = wxGetTextFromUser(S_FMT("Enter a patch name for %s:", fn.GetFullName()), "New Patch", name); name = name.Truncate(8); // Add patch to archive entry->setName(name); entry->setExtensionByType(); parent->getArchive()->addEntry(entry, "patches"); // Add patch to patch table patch_table->addPatch(name); } // Refresh patch list list_patches->updateList(); parent->pnamesModified(true); } }